#! /usr/bin/env bash -e

HOME_DIR=${LOFAR20_DIR:-${PWD}}
if [ ! -d ${HOME_DIR}/bootstrap ]; then
    # HOME_DIR/bootstrap needs to exist for this script to work.
    echo -e "$(basename ${0}):\n\nERROR\n\tCannot run this script because the \"bootstrap\" cannot be found!\n\n"
    exit 1
fi

# Save for the moment when tango will be cloned.
OLD_HOME_DIR=${HOME_DIR}.old

trap ' exit ${?} ' ABRT EXIT HUP INT TERM QUIT ERR


function pull_images()
{
    pushd ${HOME_DIR}/docker-compose && make pull
    popd
}

function build_lofar_images()
{
    pushd ${HOME_DIR}/docker-compose && make build
    popd
}

function move_tango_dir_out_of_the_way()
{
    mv ${HOME_DIR} ${OLD_HOME_DIR}
}

function remove_images()
{
    ${HOME_DIR}/bootstrap/sbin/delete_all_docker_images.sh YES_DELETE_ALL
}

function pull_tango()
{
    git clone https://git.astron.nl/lofar2.0/tango.git ${HOME_DIR}
    # Now remove the old tango dir.
    rm -rf ${OLD_HOME_DIR}
}

function clean_images()
{
    # This can return a non-0 return code if the system
    # has already been shut down.
    # Therefore disable Bash's exit on error flag
    set +e
    pushd ${HOME_DIR}/docker-compose && make clean
    popd
    # And enable it again.
    set -e
}

function start_minimal_tango()
{
    pushd ${HOME_DIR}/docker-compose
    make minimal
    make start dsconfig
    popd
}

function configure_tango_db()
{
    ${HOME_DIR}/sbin/update_ConfigDb.sh ${HOME_DIR}/CDB/LOFAR_ConfigDb.json
}

function configure_elk()
{
    pushd ${HOME_DIR}/docker-compose && make start elk-configure-host
    popd
}

function start_support_images()
{
    pushd ${HOME_DIR}/docker-compose && make start elk
    make start jupyter
    popd
}

function start_lofar_images()
{
    pushd ${HOME_DIR}/docker-compose
    make start device-pcc
    make start device-sdp
    popd
}


# Clean out the Docker volumes.
echo "-> Stopping Docker images and cleaning cleaning up their volumes..."
clean_images
echo -e "\tDone.\n"

# Move the tango repo dir out of the way.
echo "-> Moving the tango directory ${HOME_DIR} out of the way..."
move_tango_dir_out_of_the_way
echo -e "\tDone.\n"

# Now pull the repo.
echo "-> Cloning tango's master branch to ${HOME_DIR}..."
pull_tango
echo -e "\tDone.\n"

# Now clean out the docker images.
echo "-> Deleting all Docker images from this host..."
remove_images
echo -e "\tDone.\n"

# Pull SKA's Docker images.
echo "-> Installing latest SKA Docker images on this host..."
pull_images
echo -e "\tDone.\n"

# Build all of the LOFAR Docker images.
echo "-> Building LOFAR2.0 Docker images..."
build_lofar_images
echo -e "\tDone.\n"

# Now start the basic Tango system, including dsconfig.
echo "-> Staring up a minimal Tango session..."
start_minimal_tango
echo -e "\tDone.\n"

# Load LOFAR's TangoDB.
echo "-> Configuring the Tango DB for LOFAR2.0..."
configure_tango_db
echo -e "\tDone.\n"

# Now configure the ELK container.
echo "-> Configuring the ELK container for this host..."
configure_elk
echo -e "\tDone.\n"

# Here I start ELK & Jupyter.
echo "-> Start LOFAR2.0 support containers (ELK, Jupyter, etc.)..."
start_support_images
echo -e "\tDone.\n"

# And finally start all the LOFAR images.
echo "-> Start LOFAR2.0 containers..."
start_lofar_images
echo -e "\tDone.\n"

# Now the system should be ready to use.
# For instance the cold start script could now be executed.
echo -e "-> LOFAR2.0 system rebuild was successful.\n\n"
