#!/usr/bin/env bash
# ==============================================================================
# GigaTech Backup Cloud - Script Oficial de Instalação Rápida Linux
# Servidor: https://backup.getgigatech.com (Porta: 55415)
# Suporte: Debian, Ubuntu, CentOS, RHEL, Rocky Linux, AlmaLinux, Fedora
# ==============================================================================

set -e

RED='\033[0;31m'
GREEN='\033[0;32m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
BOLD='\033[1m'
NC='\033[0m'

echo -e "${CYAN}${BOLD}"
echo "======================================================================"
echo "          GigaTech Backup Cloud - Instalador do Agente Linux          "
echo "======================================================================"
echo -e "${NC}"

if [ "$EUID" -ne 0 ]; then
    echo -e "${RED}[ERRO] Este script precisa ser executado como root ou com sudo.${NC}"
    echo "Tente novamente: curl -sSL https://backup.getgigatech.com/install.sh | sudo bash"
    exit 1
fi

SERVER_HOST="backup.getgigatech.com"
SERVER_PORT="55415"
API_URL="https://backup.getgigatech.com/api/create-endpoint"
HOSTNAME=$(hostname)

echo -e "${BLUE}[1/4]${NC} Registrando endpoint '${HOSTNAME}' no servidor ${SERVER_HOST}..."

# Solicitar token de autenticação via API
REG_PAYLOAD="{\"clientname\":\"${HOSTNAME}\",\"os\":\"linux\"}"
REG_RESPONSE=$(curl -k -s -X POST -H "Content-Type: application/json" -d "${REG_PAYLOAD}" "${API_URL}" || true)

AUTH_KEY=$(echo "${REG_RESPONSE}" | grep -o '"authkey":"[^"]*' | cut -d'"' -f4 || true)

if [ -z "${AUTH_KEY}" ]; then
    echo -e "${YELLOW}[AVISO] Registro dinâmico de token ignorado. Utilizando pareamento por discovery.${NC}"
else
    echo -e "${GREEN}[OK] Chave de autenticação gerada com sucesso para ${HOSTNAME}.${NC}"
fi

echo -e "${BLUE}[2/4]${NC} Baixando instalador oficial do agente UrBackup Client..."
TMP_DIR=$(mktemp -d)
INSTALLER_PATH="${TMP_DIR}/urbackup-client-linux.sh"

curl -k -sSL "https://backup.getgigatech.com/download/UrBackupUpdateLinux.sh" -o "${INSTALLER_PATH}" || \
curl -k -sSL "https://hndl.urbackup.org/Client/2.5.31/UrBackup%20Client%20Linux%202.5.31.sh" -o "${INSTALLER_PATH}"

chmod +x "${INSTALLER_PATH}"

echo -e "${BLUE}[3/4]${NC} Instalando dependências e configurando serviço systemd..."
sh "${INSTALLER_PATH}" --silent

echo -e "${BLUE}[4/4]${NC} Gravando configurações de conexão com a Nuvem GigaTech..."

CONFIG_DIR="/usr/local/var/urbackup"
if [ ! -d "${CONFIG_DIR}" ]; then
    CONFIG_DIR="/var/urbackup"
fi
mkdir -p "${CONFIG_DIR}"

# Gravar internet_server e chaves
echo "${SERVER_HOST}" > "${CONFIG_DIR}/internet_server"
echo "${SERVER_PORT}" > "${CONFIG_DIR}/internet_server_port"
if [ -n "${AUTH_KEY}" ]; then
    echo "${AUTH_KEY}" > "${CONFIG_DIR}/internet_authkey"
fi

# Reiniciar o backend para aplicar as credenciais
systemctl restart urbackupclientbackend 2>/dev/null || service urbackupclientbackend restart 2>/dev/null || true

rm -rf "${TMP_DIR}"

echo -e "${GREEN}${BOLD}"
echo "======================================================================"
echo "  ✓ GigaTech Backup instalado e conectado com sucesso!"
echo "  ✓ Servidor: ${SERVER_HOST}:${SERVER_PORT}"
echo "  ✓ Máquina: ${HOSTNAME}"
echo "  ✓ Status do Serviço: ATIVO e monitorado continuamente"
echo "======================================================================"
echo -e "${NC}"
