#!/bin/bash

# Source the setup_helper with Functions used in this script
. INIT/setup_helper

SCRIPT_DIR=$(cd "$(dirname "$0")"; pwd)
mkdir -p $SCRIPT_DIR/log
LOG_FILE="$SCRIPT_DIR/log/setup_$( date +'%Y%m%d-%H%M%S').log"
exec > >(tee -a "$LOG_FILE") 2>&1

###### MAIN ######

# Prompt Start of uCommand SETUP and EXIT commands
echo -e "\n\n####################################"\
        "\n#  Starting uCommand Setup script  #"\
        "\n####################################\n"\
        "\n[NOTE] To EXIT this Script at ANY point press: [CTRL+C]\n"


# Step #1: Check required Packages
echo -e "\n\n#######################################"\
        "\n# Checking PHP and Java requirements  #"\
        "\n#######################################"
check_php_and_java
check_status_or_exit $?


# Step #2: Check and Prepare JAVA_HOME
echo -e "\n\n################################################"\
        "\n# Validating and Preparing Java Home directory #"\
        "\n################################################"
check_and_prepare_java_home
check_status_or_exit $?


# Step #3: Get and Validate User INPUTS
echo -e "\n\n#######################################"\
        "\n# Getting and Validating User INPUTS  #"\
        "\n#######################################"
get_and_validate_user_inputs
check_status_or_exit $?


# Step #4: Download and Unzip latest udclient.zip 
echo -e "\n\n################################"\
        "\n# Download and unzip ucommand  #"\
        "\n################################"
download_and_prepare_udczip
check_status_or_exit $?


# Step #5: Validate User Login to uCommand with provided credentials
echo -e "\n\n##################################"\
        "\n#  Check User Login to uCommand  #"\
        "\n##################################"
validate_user_login
VALIDATE_LOGIN_STATUS=$?
if [ $VALIDATE_LOGIN_STATUS -ne 0 ]; then
    # Get Inputs and Validate Login UNTIL success or User press: CTRL+C
    while [ $VALIDATE_LOGIN_STATUS -ne 0 ];
    do
        # CLEAR User Inputs:
        unset UCD_WEB_URL
        unset UCD_USER
        unset UCD_PASSWORD
        
        echo -e "\n\n##################################################"\
                "\n#  Please try again OR [CTRL+C] to Exit Script  #"\
                "\n#################################################"

        # Get USER inputs (without HEADING)
        get_and_validate_user_inputs
        check_status_or_exit $?
        if [ $? -eq 0 ]; then
            # Validate inputs (without heading)
            validate_user_login 1
            VALIDATE_LOGIN_STATUS=$?
        fi    
    done
fi


# Step #6: Prepare uCommand Authentication Token and setup uCommand Config
echo -e "\n\n###################################"\
        "\n#  Preparing uCommand Auth token  #"\
        "\n###################################"
prepare_auth_token
check_status_or_exit $?


# Step #7: Setup uCommand Config
echo -e "\n\n#######################################"\
        "\n#  Setting up uCommand configuration  #"\
        "\n#######################################\n"\
        "\n[INFO] weburl   : '${UCD_WEB_URL}'"\
        "\n       username : '${UCD_USER}'"\
        "\n       authtoken: '${TOKEN}'"\
        "\n       exp_date : '${DATE}'"\
        "\n       java_home: '${JAVA_HOME_UCOMMAND}'\n"
        
# Get Current Working Directory
PWD=$(pwd)

# Prepare ucommand config/ directory
UCD_CONFIG_DIR="${PWD}/config"
if [ ! -d "${UCD_CONFIG_DIR}" ]; then
    mkdir -p "${UCD_CONFIG_DIR}"
fi
UCD_SERVERS_DIR="${UCD_CONFIG_DIR}/servers"
if [ ! -d "${UCD_SERVERS_DIR}" ]; then
    mkdir -p "${UCD_SERVERS_DIR}"
fi

# Set alias
get_alias $UCD_SERVERS_DIR
check_status_or_exit $?

# Set default environment and application
get_env_app
check_status_or_exit $?

# Move to ucommand config/ directory
cd "${UCD_CONFIG_DIR}"

# Prepare ucd.config.php file
if [ ! -f 'ucd.config.php' ]; then
    # Prepare ucd.config.temp.php file
    touch 'ucd.config.temp.php'
    # Add the PHP open tag to file
    echo "<?php" > 'ucd.config.temp.php'
else
    # Copy ucd.config.php into temp file
    cat 'ucd.config.php' | grep -v java_home | grep -v alias > 'ucd.config.temp.php'
fi

# Update java_home value in ucd.config.temp.php file
echo "\$config['java_home'] = '${JAVA_HOME_UCOMMAND}';" >> 'ucd.config.temp.php'
echo "\$config['alias'] = '${ALIAS}';" >> 'ucd.config.temp.php'
# Update ucd.config.php
mv -f 'ucd.config.temp.php' 'ucd.config.php'

# Update user login information in server file
cd $UCD_SERVERS_DIR
SERVER_FILE="${ALIAS}.server.php"
echo "<?php" > $SERVER_FILE
echo "\$config['alias'] = '${ALIAS}';" >> $SERVER_FILE
echo "\$config['username'] = '${UCD_USER}';" >> $SERVER_FILE
echo "\$config['authtoken'] = '${TOKEN}';" >> $SERVER_FILE
echo "\$config['exp_date'] = '${DATE}';" >> $SERVER_FILE
echo "\$config['weburl'] = '${UCD_WEB_URL}';" >> $SERVER_FILE
echo "\$config['application'] = '${APPLICATION}';" >> $SERVER_FILE
echo "\$config['environment'] = '${ENVIRONMENT}';" >> $SERVER_FILE

# PROMPT final Message
echo -e "\n[INFO] Configuration saved in '${UCD_CONFIG_DIR}/ucd.config.php'"\
        "\n\n[CONFIGURATION COMPLETED]\n\n"
