#!/bin/bash

lockfile .screen

target_list_file=/tmp/target_list
touch ${target_list_file}

function scroll_up {
# Check if TERM is available
[[ "${TERM}" == "dumb" ]] && return

for i in $(cat ${target_list_file}); do
    tput cuu1
    tput el
done
}

function print_targets {
# Check if TERM is available
[[ "${TERM}" == "dumb" ]] && return

count=1
for i in $(cat ${target_list_file}); do
    printf "[ %02d ] [ %s ]\n" "${count}" "$i"
    ((count++))
done
}

function remove_target {
# Check if TERM is available
local status="finished"
[[ ! -z "${2}" ]] &&  status="cached"
[[ "${TERM}" == "dumb" ]] && echo "[ ${status} ] [ $1 ] " && return

old_list=$(cat ${target_list_file})
rm ${target_list_file}
for target in ${old_list}; do
    if [[ "${target}" != "$1" ]]; then
        echo ${target} >> ${target_list_file}
    fi
done
touch ${target_list_file}
}

function add_target {
# Check if TERM is available
[[ "${TERM}" == "dumb" ]] && echo "[ building ] [ $1 ] " && return

echo $1 >> ${target_list_file}
}

function print_targets_delay {
sleep 2 && print_targets  && rm -f .screen &
exit 0
}

# $3 takes the DPKG caching argument, if the target is loaded from cache,
# it adds the log as 'cached' else it is logged as 'finished'
#
# Without DPKG cache support :
#   [ building ] [ target/docker-base.gz ]
#   [ finished ] [ target/docker-base.gz ]
#
# With DPKG cache support :
#   [ building ] [ target/docker-base.gz ]
#   [ cached   ] [ target/docker-base.gz ]

while getopts ":a:d:e:" opt; do
    case $opt in
        a)
            scroll_up
            add_target ${OPTARG}
            print_targets
            ;;
        d)
            scroll_up
            remove_target ${OPTARG} $3
            print_targets
            ;;
        e)
            scroll_up
            remove_target ${OPTARG} $3
            echo "[ FAIL LOG START ] [ ${OPTARG} ]"
            cat ${OPTARG}.log
            echo "[  FAIL LOG END  ] [ ${OPTARG} ]"
            print_targets_delay
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            rm -f .screen
            exit 1
            ;;
        :)
            echo "Option -$OPTARG requires an argument." >&2
            rm -f .screen
            exit 1
            ;;
    esac
done

rm -f .screen