#!/bin/bash

action=$1
escaped_name=$2
container=`systemd-escape -u $escaped_name`

RUN_DIR="/run/unas-docker"
JOB_DIR="$RUN_DIR/upgrade/$container"
YML="$JOB_DIR/docker-compose.yml"

prepare_(){
    if [ ! -d "$JOB_DIR" ];then
        mkdir -p $JOB_DIR
    fi

    # Get config
    cd $JOB_DIR
    compose=$(dirname $(realpath $0))/dockercompose_yml
    $compose -i $container > $YML
    # TODO(yinkai 20250410): 如果有两个容器使用同一个image，那么升级一个后，另一个将会失去image信息
    # 想办法从upgradable.json获取信息
    # 页面上拿不到，但是这边拿的方式不一样，似乎可以拿到？不影响，不动了
    image=`grep '^    image: ' $YML | awk '{print $2}' | xargs echo`

    echo Prepare to pull $image
}

start_(){
    echo Start pulling $image
    # Give old image a name since the old image name will belong to new image
    n_tag=`docker inspect $image | jq -r .[0].RepoDigests[0] | awk -F@ '{print $1}'`
    if [ -n "$n_tag" ];then
        n_tag=$n_tag`docker inspect $image | jq -r .[0].Id | grep -Eo ':[0-9a-z]{12}'`
        docker tag $image $n_tag
    fi
    image_escaped=`systemd-escape $image`
    /unas/sbin/docker/pull prepare "$image_escaped"
    systemctl start unas-docker-pull@"$image_escaped".service

    docker container stop $container >/dev/null 2>&1
    docker container rm $container >/dev/null 2>&1
    docker compose up -d
}

clear_(){
    echo Clear tmp files
    rm -rf $JOB_DIR >/dev/null 2>&1 || :
}

case "$action" in
    start)
        prepare_
        start_
        ;;
    clear)
        clear_
        ;;
    *)
        ;;
esac

exit 0
