#!/bin/bash

export TERM=xterm

set_terminal_size() {
    eval $(resize 2>/dev/null)
    export COLUMNS
    export LINES
}

trap set_terminal_size WINCH
set_terminal_size

base_url="https://uniconnect.license.uniconnect.io"
LOG_FILE="./uniconnect_setup.log"
DOMAIN=""

source /usr/local/bin/uniconnect/scripts/utils.sh
source /usr/local/bin/uniconnect/scripts/directory_creation.sh
source /usr/local/bin/uniconnect/scripts/docker.sh
source /usr/local/bin/uniconnect/scripts/environment_setup.sh
source /usr/local/bin/uniconnect/scripts/nginx_config.sh
source /usr/local/bin/uniconnect/scripts/get_domain.sh
source /usr/local/bin/uniconnect/scripts/messages.sh

setup_environment() {

    if ! create_directories; then
        log  "❌ Directory creation failed. Exiting."
        echo "❌ Directory creation failed. Exiting."
        exit 1
    else 
        create_env_file
        create_ui_env_file
        create_nginx_config_file
        create_docker_compose

        log "Enviroment Setup successfully"
    fi
}

start_uniconnect() {

    cd $BASE_ETC/docker
    docker compose up --build -d
    if [ $? -ne 0 ]; then
        echo "❌ Docker Compose failed. Exiting."
        exit 1
    fi
    docker logout > /dev/null 2>&1
    if [ $? -eq 0 ]; then
        echo "✅ Docker Compose started successfully."
        sleep 5

        echo "🔍 Checking domain: ${DOMAIN}.uniconnect.io"

        while true; do
            IP=$(dig +short "${DOMAIN}.uniconnect.io" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)

            for i in "${!COLORS[@]}"; do
                clear
                print_logo_fade "${COLORS[$i]}" "${TRUNCATE[$i]}"
                sleep 0.1
            done

            if [[ "$IP" == "$SERVER_IP" ]]; then
                clear
                break
            fi
        done

        echo "✔️ Proceeding after domain resolved..."
        # final
        clear
        echo -e "$LOGO"
        echo -e "$BANNER"
        echo -e "$SEPERATOR"
        intro
        echo -e "$SEPERATOR"

    else
        echo "❌ Docker Compose failed. Exiting..."
        exit 1
    fi

}


log "Starting Uniconnect installation process..."

if [ "$(id -u)" -ne 0 ]; then
  error_exit "This script must be run as root."

elif ! command -v docker &> /dev/null; then
  error_exit "Docker is not installed on this server."

elif ! docker info &> /dev/null; then
  error_exit "Docker is installed but not accessible. Is the Docker daemon running?"

else
    if ! get_domain; then
        echo "❌ Directory creation failed. Exiting."
        exit 1
    fi
fi

log "Uniconnect installation completed successfully."