#!/bin/bash

#######################################################
# This is a sample install file for ntp.time_server.
# This file can be used to perform one-time actions
# which help prepare the model component for use.
#
# Common uses of install.sh files include downloading
# VM Resources from the Internet and installing new
# Python packages into FIREWHEEL's virtual environment.
#
# NOTE: When you are creating these files, it is
# imperative that specific versions of software are
# used. Without being as specific as possible,
# experimental results will **NOT** be repeatable.
# We strongly recommend that any changes to software
# versions are accompanied by a warning and new model
# component version.
#######################################################

# Create a flag for verifying installation
INSTALL_FLAG=.ntp.time_server.installed

#######################################################
# Checking if there this script has already been complete.
#######################################################
function check_flag() {
    if [[ -f "$INSTALL_FLAG" ]]; then
        echo >&2 "ntp.time_server is already installed!"
        exit 117;  # Structure needs cleaning
    fi
}


#######################################################
# Install python packages into the virtual environment
# used by FIREWHEEL. This takes in an array of packages.
#######################################################
function install_python_package() {
    pkgs=("$@")
    for i in "${pkgs[@]}";
    do
        python -m pip install "$i"
    done
}


#######################################################
# Download using wget and then checksum the downloaded files.
#
# It is important to verify that the downloaded files
# are the files are the same ones as expected.
# This function provides an outline of how to checksum files,
# but will need to be updated with the specific hashes/file names
# that have been downloaded.
#
# This function assumes that the passed in hashes are SHA-256
#######################################################
function wget_and_checksum() {
    downloads=("$@")
    # Uses 2D arrays in bash: https://stackoverflow.com/a/44831174
    declare -n d
    for d in "${downloads[@]}";
    do
        wget "${d[0]}"
        echo "${d[1]}  ${d[2]}" | shasum -a 256 --check
    done
}


#######################################################
# A function to help users clean up a partial installation
# in the event of an error.
#######################################################
function cleanup() {
    echo "Cleaning up ntp.time_server install"
    rm -rf $VMR_DIR
    rm -rf $INSTALL_FLAG
    exit 1
}
trap cleanup ERR

# Start to run the script

# Ensure we only complete the script once
check_flag

#######################################################
# Uncomment if there are Pip packages to install
# `pip_packages` should be space separated strings of
# the packages to install
#######################################################
# pip_packages=("requests" "pandas")
# install_python_package "${pip_packages[@]}"


######################################################
# Uncomment if there is data/VM resources/images to download
# `file1`, `file2`, etc. should be space separated strings of
# (URL SHASUM-256 FILENAME).
#
# We recommend that explicit versions are used for all Images/VMRs to prevent
# possible differences between instances of a given Model Component.
# Please be mindful of the software versions as it can have unintended
# consequences on your Emulytics experiment.
#
# We require checksums of the files to assist users in verifying
# that they have downloaded the same version.
#######################################################
VMR_DIR=ntp-trusty-server
mkdir -p $VMR_DIR
pushd $VMR_DIR

# Be sure to use SHA-256 hashes for the checksums (e.g. shasum -a 256 <file>)
file1=("https://launchpadlibrarian.net/159722862/libopts25_5.18-2ubuntu2_amd64.deb" "79033a7a4d9f08f4489e00e9a052baeb821fb8cc7f95b0cc8218eda715635c2f" "libopts25_5.18-2ubuntu2_amd64.deb")
file2=("https://launchpadlibrarian.net/377462140/ntp_4.2.6.p5+dfsg-3ubuntu2.14.04.13_amd64.deb" "10355626f9b9c71cb2649fdda1d58e4ec01f4a5074f54049b9730d1d4b55cc98" "ntp_4.2.6.p5+dfsg-3ubuntu2.14.04.13_amd64.deb")
files=(file1 file2)
wget_and_checksum "${files[@]}"
echo "Downloaded and checksummed all files!"
popd

# Compress directory
tar -cvf $VMR_DIR.tar $VMR_DIR
mv $VMR_DIR.tgz vm_resources/
rm -rf $VMR_DIR


#######################################################
# Add any other desired configuration/packaging here
#######################################################
# Set the flag to notify of successful completion
touch $INSTALL_FLAG
