#!/bin/bash
readonly LOG_FILE="./install_log.txt"
readonly red=`tput setaf 1`
readonly green=`tput setaf 2`
readonly reset=`tput sgr0`

sudo touch $LOG_FILE

exec > >(tee ${LOG_FILE}) 2>&1

if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root (use sudo). Press enter to exit this script."
   exit 1
fi

sudo mkdir -p /home/gamedash/docker

cd /home/gamedash/docker

##################################################################
#
# Prompt for Gamedash Setup Variables
#
##################################################################

echo Welcome to Gamedash Setup

echo -n "Enter your ${green}FRONTEND${reset} (graphical web interface eg. dash.mycompany.com) domain and press [ENTER]: "
read frontend

echo -n "Enter your ${green}API${reset} (public API address eg. api.mycompany.com) domain and press [ENTER]: "
read api

echo -n "Enter your ${green}RELAY${reset} (socket relay address eg. relay.mycompany.com) domain and press [ENTER]: "
read relay

echo -n "Enter your ${green}MySQL${reset} Database Name and press [ENTER]: "
read database

echo -n "Enter your ${green}MySQL${reset} Username and press [ENTER]: "
read sqluser

echo -n "Enter your ${green}MySQL${reset} User Password and press [ENTER]: "
read sqluserpass

echo -n "Enter your ${green}MySQL${reset} Root Password and press [ENTER]: "
read sqlrootpass

##################################################################
#
# RHEL/CentOS Specific Installs
#
##################################################################

if [ -f /etc/redhat-release ]; then

    sudo yum update -y

    #remove current version of docker
    sudo yum remove -y docker \
        docker-client \
        docker-client-latest \
        docker-common \
        docker-latest \
        docker-latest-logrotate \
        docker-logrotate \
        docker-engine

    sudo yum install -y yum-utils

    sudo yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo

    sudo yum install -y epel-release zip python3 python3-pip unzip docker-ce docker-ce-cli containerd.io curl unzip

    python3 -m pip --version

    sudo systemctl start docker

fi

##################################################################
#
# Ubuntu Specific Installs
#
##################################################################

if [ -f /etc/lsb-release ]; then

    sudo apt-get update && sudo apt-get upgrade -y

    #remove current version of docker
    sudo apt-get remove -y docker docker-engine docker.io containerd runc

    sudo apt-get install -y \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        software-properties-common

    sudo apt-add-repository universe -y

    sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    sudo add-apt-repository \
        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
        $(lsb_release -cs) \
        stable"

    sudo apt-get update

    sudo apt-get install -y zip unzip python3 python3-pip docker-ce docker-ce-cli containerd.io

    python3 -m pip --version

fi

##################################################################
#
# Download helpers
#
##################################################################

sudo curl -s https://download.gamedash.io/docker/helpers/helpers.zip -o helpers.zip

mkdir -p helpers

sudo unzip -xo helpers.zip -d ./helpers

sudo rm helpers.zip

##################################################################
#
# Install Docker-Compose
#
##################################################################

sudo docker run hello-world
sudo curl -sL "https://github.com/docker/compose/releases/download/1.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -fs /usr/local/bin/docker-compose /usr/bin/docker-compose
sudo docker-compose --version

##################################################################
#
# Add Firewall Rules
#
##################################################################

if [ -f /etc/lsb-release ]; then
    ufw allow https
    ufw allow 2152/tcp
    ufw reload
fi

##################################################################
#
# Download Docker compose template
#
##################################################################

sudo curl -s https://download.gamedash.io/docker/compose/template.zip --output docker-compose-template.zip

sudo unzip -xo docker-compose-template.zip

sudo rm docker-compose-template.zip

##################################################################
#
# Configure Json Files
#
##################################################################

sudo python3 -m pip install pydash

sudo python3 ./helpers/Helpers.py --path ./config/backend/development.json --key infrastructure.relay.host.domain --value $relay
sudo python3 ./helpers/Helpers.py --path ./config/frontend/config.json --key api.domain --value $api
sudo python3 ./helpers/Helpers.py --path ./config/frontend/config.json --key cookie.domain --value .$frontend

sudo cp ./config/backend/development.json ./config/backend/production.json

##################################################################
#
# Download translation languages
#
##################################################################

sudo mkdir -p ./translation/languages

sudo curl -s https://download.gamedash.io/translation/languages/languages.zip -o ./translation/languages/languages.zip

sudo unzip -xo ./translation/languages/languages.zip -d ./translation/languages

sudo rm ./translation/languages/languages.zip

##################################################################
#
# Download favicon
#
##################################################################

sudo mkdir -p ./assets/favicon

sudo curl -s https://download.gamedash.io/assets/favicon/favicon.zip -o ./assets/favicon/favicon.zip

sudo unzip -xo ./assets/favicon/favicon.zip -d ./assets/favicon

sudo rm ./assets/favicon/favicon.zip

##################################################################
#
# Set .env Values
#
##################################################################

cat > .env << _EOF
# Mode
MODE=DEVELOPMENT

# Database Details
DB_MYSQL_USER=$sqluser
DB_MYSQL_PASS=$sqluserpass
DB_MYSQL_DATABASE=$database
DB_MYSQL_ROOT_PASS=$sqlrootpass

# Hostnames

FRONTEND_HOST=$frontend
BACKEND_HOST=$api
RELAY_HOST=$relay

# Relay memory - Recommended 512MB, minimum = 256MB
RELAY_JAVA_ARGS=-Xmx512M -Xms512M

_EOF

##################################################################
#
# Start Docker Containers
#
##################################################################

sudo docker-compose up -d

echo "Waiting for the images to start"

waitForSuccessResponse() {
    timeout -s TERM 45 bash -c \
    'while [[ "$(curl -s -o /dev/null -L -w ''%{http_code}'' ${0})" != "200" ]];\
    do echo "Waiting for ${0}" && sleep 2;\
    done' ${1}
}

waitForSuccessResponse https://${frontend}/index.html
waitForSuccessResponse https://${api}/v1

echo "Installation complete. Visit ${green}https://"$frontend"${reset} to finish the setup."