#!/bin/bash
#
# Copyright (C) 2019 OX Software GmbH
# 
# This file is part of OX Automation.
#
# OX Automation is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OX Automation is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# 
# See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OX Automation. If not, see <http://www.gnu.org/licenses/>.
#
#
# Authors:
# Daniel Pondruff <daniel.pondruffopen-xchange.com>
#

set -e
SCRIPT_DIR="$( cd "$(dirname "$0")" ; pwd -P)"
# sourcing some commonly used functions and executing basic checks
source ${SCRIPT_DIR}/../lib/common.bash
source ${SCRIPT_DIR}/../lib/setup.bash
checkRootPrivileges
detectDistribution

## Help text
show_usage() {
echo -n "
  $0 [OPTIONS]
  
    --enable
    --disable
    --restart
    -k | --key <value>

"
}


### reading config from command line; overriding defaults
POSITIONAL=()
while [[ $# -gt 0 ]]
do
key="$1"

case $key in
    -h|--help)
    show_usage
    exit 0
    shift
    ;;
    --debug)
    echo "WARNING: Debug flag set (--debug)"
    set -x
    shift
    ;;
    --enable)
    FEATURE_ENABLE=true
    shift
    ;;
    --disable)
    FEATURE_ENABLE=false
    shift
    ;;
    -k|--key)
    value="$2"
    shift
    shift
    ;;
    --restart)
    RESTART_OX=true
    shift
    ;;
    *)    # unknown option
    POSITIONAL+=("$1") # save it in an array for later
    shift 
    ;;
esac
done
set -- "${POSITIONAL[@]}" # restore positional parameters



if [[ "${FEATURE_ENABLE}" = true  ]]; then
echo "Install Docker !" # TODO
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -
# add-apt-repository \
#    "deb [arch=amd64] https://download.docker.com/linux/debian \
#    $(lsb_release -cs) \
#    stable"
# apt-get update && apt-get install docker-ce
# curl -fsSL https://get.docker.com -o get-docker.sh
# sh get-docker.sh

    if [[ true == "${ANY_DEB}" ]]; then
        # Adding dovecot key
        apt-key adv --fetch-keys https://download.docker.com/linux/debian/gpg
        {
        echo "deb https://download.docker.com/linux/debian ${DIST_VERSION} stable"
        } > /etc/apt/sources.list.d/docker.list

    elif [[ true == "${ANY_SLES}" ]]; then
        echo ""
        echo "ERROR: dovecot setup on sles not yet implemented"
        echo ""
        sleep 10
        exit 1
    elif [[ true == "${ANY_RHEL}" ]] || [[ true == "${ANY_CENTOS}" ]]; then
        echo ""
        echo "ERROR: dovecot setup on rhel/centos not yet implemented"
        echo ""
        sleep 10
        exit 1 
    fi
    installPackages "docker-ce"

echo "Install Nodejs"
curl -sL https://deb.nodesource.com/setup_13.x -o nodesource_setup.sh
bash nodesource_setup.sh
installPackages




echo "Install dependency...." # DEBIAN ONLY ! TODO
    if [[ true == "${ANY_DEB}" ]]; then
        # Adding yarnpkg key
        apt-key adv --fetch-keys https://dl.yarnpkg.com/debian/pubkey.gpg
        { 
        echo "deb https://dl.yarnpkg.com/debian/ stable main"
        } > /etc/apt/sources.list.d/yarnpkg.list
        # Adding nodejs key
        apt-key adv --fetch-keys https://deb.nodesource.com/gpgkey/nodesource.gpg.key
        { 
        echo "deb https://deb.nodesource.com/node_13.x ${DIST_VERSION} main"
        } > /etc/apt/sources.list.d/nodesource.list
    elif [[ true == "${ANY_SLES}" ]]; then
        echo ""
        echo "ERROR: dovecot setup on sles not yet implemented"
        echo ""
        sleep 10
        exit 1
    elif [[ true == "${ANY_RHEL}" ]] || [[ true == "${ANY_CENTOS}" ]]; then
        echo ""
        echo "ERROR: dovecot setup on rhel/centos not yet implemented"
        echo ""
        sleep 10
        exit 1 
    fi
    installPackages "git nodejs yarn nmap default-jre jq"


echo "Clone Repo"
rm -rf /opt/open-xchange/tests/frontend
git clone --depth 1 -b master https://gitlab.open-xchange.com/frontend/core  /opt/open-xchange/tests/frontend
cd  /opt/open-xchange/tests/frontend/ui
npm install -g allure-commandline --save-dev

if [ -z ${CC_IP} ];then
    CC_IP=$(ip a show $(ip r | grep -oP 'default .* \K.+') | grep -oP 'inet \K[\d\.]+') # DEBIAN Only.... -.-
fi

setOXProperty PROVISIONING_URL "http://${CC_IP}/" /opt/open-xchange/tests/frontend/ui/.env
setOXProperty CONTEXT_ID "1337" /opt/open-xchange/tests/frontend/ui/.env
setOXProperty SELENIUM_HOST "localhost" /opt/open-xchange/tests/frontend/ui/.env
setOXProperty LAUNCH_URL "http://${CC_IP}/appsuite/" /opt/open-xchange/tests/frontend/ui/.env
setOXProperty SMTP_SERVER "${CC_IP}" /opt/open-xchange/tests/frontend/ui/.env
setOXProperty IMAP_SERVER "${CC_IP}" /opt/open-xchange/tests/frontend/ui/.env

yarn
[ ! "$(docker ps -a | grep "hA4uYS")" ] && docker run --name "hA4uYS" -d -p 4444:4444 -p 5900:5900 -v /dev/shm:/dev/shm selenium/standalone-chrome-debug:latest
yarn e2e


elif [[ "${FEATURE_ENABLE}" = false  ]]; then
  echo ""
  # do something to disable it
fi

if [[ "${RESTART_OX}" = true  ]]; then
  restartService open-xchange
fi