#!/bin/bash
#set -x
exec > /dev/null 2>&1

unas_pack=".unas_tgz"

action=$1
id=$2
conf_dir="/unas/run/docker/import/$id"
# The task conf
conf_file="$conf_dir/conf"
json_file="$conf_dir/json"

code=0

. $conf_file
DATA=`realpath /var/lib/docker/unas-docker/`

if [ "$USER" != "admin" ] && ! sudo -u $USER test -r $FILE;then
    exit 2 # Permission denied
fi

prepare_(){
    :
}

start_(){
    if echo "$FILE" | grep -Eq ".*$unas_pack";then
        # UNAS docker tgz
        import_unas_tgz
    elif echo "$FILE" | grep -Eq ".*\.(yml|yaml)";then
        pull=$(dirname $(realpath $0))/pull
        cd $conf_dir
        cp "$FILE" docker-compose.yml
        image_name=`grep '[\d]*image:.*' docker-compose.yml | awk -F 'image:' '{print $2}' | xargs echo`
        $pull start "$image_name"
        $pull clear "$image_name"
        sed -i "s/container_name:.*/container_name: \"$CONTAINER\"/g" docker-compose.yml
        docker compose up -d
        rm docker-compose.yml
        if [ $clear -eq 1 ];then
            rm $file
        fi
    else
        # Normal docker tar
        image=`docker load -i "$FILE" | head -n1 | grep -E "Loaded image: .*"`
        if [ $? -eq 0 ];then
            # Succeed. Further process
            image=`echo $image | awk '{print $3}'`
            image_name=`echo $image | awk -F: '{print $1}'`
            image_tag=`echo $image | awk -F: '{print $2}'`
            if [ "$image_name" == "unas_export_tmp" ];then
                docker tag $image $TAG && docker rmi $image
            else
                docker tag $image $TAG
            fi
        else
            # Fail
            code=1
        fi
    fi

    # Remove temp file
    realpath $FILE | grep -E "^$DATA/tmp" && rm $FILE
}

clear_(){
    rm -rf "$conf_dir"
}

import_unas_tgz(){
    docker_path=`realpath /var/lib/docker`
    chmod 711 "$docker_path"
    tmp_path="$DATA/tmp/$id"

    [ -d "$tmp_path" ] || mkdir -p "$tmp_path" ; chown www-data:www-data "$tmp_path"

    image=`tar zxf "$FILE" -C $tmp_path && docker load -i $tmp_path/image.tar`
    image=`echo $image | awk '{print $3}'`
    image_name=`echo $image | awk -F: '{print $1}'`
    image_tag=`echo $image | awk -F: '{print $2}'`
    if [ "$image_name" == "unas_export_tmp" ];then
        docker tag $image $TAG && docker rmi $image
    else
        docker tag $image $TAG
    fi
    cp $tmp_path/config.json $json_file
    rm -rf $tmp_path
}

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

exit $code
