#!/bin/sh
#///////////////////////////////////////////////////////////////////////////////
#// Copyright (c) 2000-2017 Ericsson Telecom AB                               //
#//                                                                           //
#// All rights reserved. This program and the accompanying materials          //
#// are made available under the terms of the Eclipse Public License v1.0     //
#// which accompanies this distribution, and is available at                  //
#// http://www.eclipse.org/legal/epl-v10.html                                 //
#///////////////////////////////////////////////////////////////////////////////

CURRENT_DIR=`pwd`
COPY_TO="."
CLL_DIR=`readlink -f $0 | sed 's/\/test.*//g'`
WEBGUI_DIR="$CLL_DIR/../EPTF_Web_GUI_CNL113864"
DO_ZIP=0

showUsage()
{
    echo "Usage: $0 <options>"
    echo "The script will create the offline version of WebGUI."
    echo "Options:"
    echo "  -t [directory]: target directory to create the package in, default: $COPY_TO"
    echo "  -c [directory]: the CLL respository, default: $CLL_DIR"
    echo "  -z : enable zip output, default: disabled"
}

while getopts t:c:z o
do
    case "$o" in 
        t) COPY_TO=$OPTARG;;
        c) CLL_DIR=$OPTARG;;
        z) DO_ZIP=1;;
        [?]) showUsage; exit 1;;
    esac
done

WEBGUI_SRC=$WEBGUI_DIR/src/WebGUI
API_DIR=$CLL_DIR/src/DsRestAPI/Api/Js
CUST_DIR=$CLL_DIR/test/WebGUI/TestContent
TESTCASES_DIR=$CLL_DIR/test/DsRestAPI/JSON_reqResp

MOCK_SERVER_DIR=$CLL_DIR/test/WebGUI/MockedServer
MOCKTEST_DIR=$CLL_DIR/test/WebGUI/MockTest
MOCKTEST_DSSERVERDESCRIPTOR=$CLL_DIR/test/DsRestAPI/DsRestAPITestConfig.json
SELENIUM_DIR=$CLL_DIR/test/WebGUI/Selenium

API_LOC=$COPY_TO/WebGUI/htdocs/Utils/DsRestAPI
CUST_LOC=$COPY_TO/WebGUI/htdocs/CustomizableContent
WEBAPP_LOC=$COPY_TO/WebGUI/htdocs/WebApplications
TESTCASES_LOC=$WEBAPP_LOC/MockTest/Testcases
SELENIUM_LOC=$COPY_TO/WebGUI/htdocs/Selenium

MAIN_HTML=$COPY_TO/WebGUI/htdocs/Main.html
TEST_HETML=$COPY_TO/WebGUI/htdocs/Test.html

# create target directory if it does not exist
if [ ! -d $COPY_TO ]; then
    mkdir $COPY_TO
fi

# check if offline WebGui already exists and delete it if it does
if [ -e $COPY_TO/deleteOfflineWebGUI.sh ]; then
    cd $COPY_TO
    ./deleteOfflineWebGUI.sh
    cd $CURRENT_DIR
fi

cp -arL $WEBGUI_SRC $COPY_TO

# check if the symbolic link to the js API exists and delete it if necessary
if [ -e $API_LOC ]; then
    rm -rf $API_LOC
fi
cp -arL $API_DIR $API_LOC

# check if the directory exsits (it usually does, not only when the server is running) and delete it
if [ -e $COPY_TO/WebGUI/htdocs/CustomizableContent ]; then
    rm -rf $COPY_TO/WebGUI/htdocs/CustomizableContent
fi
cp -arL $CUST_DIR $CUST_LOC

cp -arL $MOCK_SERVER_DIR $API_LOC
cp -arL $MOCKTEST_DIR $WEBAPP_LOC

cp -arL $SELENIUM_DIR $SELENIUM_LOC

cp -arL $TESTCASES_DIR/* $TESTCASES_LOC

cp -arL $MOCKTEST_DSSERVERDESCRIPTOR $WEBAPP_LOC/MockTest/DsRestAPITestConfig.js

awk '{
    if ($0 ~ /FileHandler.js/) {
        sub("FileHandler.js", "DsRestAPI/MockedServer/FileHandler.js");
        print $0;
    } else {
        print $0
    }
}' $MAIN_HTML > $TEST_HETML

cd $COPY_TO/WebGUI/htdocs
listOfFiles=`find | cut -b3- | awk '{if(NR>1){if(NR!=2){print ", "}print "\""$0"\""}}'`
# this will replace \n-s with spaces, so sed will work
listOfFiles=`echo $listOfFiles` 
cd $CURRENT_DIR

sed -i "s|REPLACETHIS|$listOfFiles|g" $API_LOC/MockedServer/FileHandler.js

if [ $DO_ZIP == 1 ]; then
    cd $COPY_TO
    tar -czvf WebGUI.tgz WebGUI >> /dev/null
    rm -rf WebGUI
    cd $CURRENT_DIR
fi

cd $CURRENT_DIR

echo "rm -rf WebGUI; rm -f WebGUI.tgz; rm -f deleteOfflineWebGUI.sh" > $COPY_TO/deleteOfflineWebGUI.sh
chmod u+x $COPY_TO/deleteOfflineWebGUI.sh
