#!/bin/bash
# setup_loadbalancer.sh - Script Interativo para Configurar Nginx como Proxy Reverso (Load Balancer)

# ====================================================================
# VARIÁVEIS DE CONFIGURAÇÃO PADRÃO
# ====================================================================

STREAM_PORT="80" # Porta padrão de streaming do seu painel (geralmente 80)

# ====================================================================
# FUNÇÃO PARA DETECTAR O IP PÚBLICO DESTA VPS
# ====================================================================
detect_ip() {
    # Tenta usar curl para pegar o IP de um serviço externo confiável
    VPS_PUBLIC_IP=$(curl -s http://icanhazip.com)
    if [ -z "$VPS_PUBLIC_IP" ]; then
        # Fallback para ip addr
        VPS_PUBLIC_IP=$(ip addr | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}' | cut -d/ -f1 | head -n 1)
    fi
    # Remove espaços ou caracteres indesejados
    VPS_PUBLIC_IP=$(echo $VPS_PUBLIC_IP | tr -d '[:space:]')
}

# ====================================================================
# SOLICITAR INFORMAÇÕES AO USUÁRIO
# ====================================================================

echo "================================================================"
echo "      CONFIGURAÇÃO DO NOVO LOAD BALANCER / PROXY VPS"
echo "================================================================"

# 1. IP/DNS do Painel Master (Ex: toptv.tvsbr.top)
read -p "1. Digite o IP ou DNS do seu PAINEL MASTER (Servidor Principal): " PANEL_MASTER_IP
if [ -z "$PANEL_MASTER_IP" ]; then
    echo "ERRO: O IP/DNS do Master é obrigatório."
    exit 1
fi

# 2. Chave Secreta para o Cronjob (Chave de autenticação para o Painel)
echo ""
echo "2. Chave Secreta do Cronjob (Invente uma chave forte agora, ex: ChaveMaster123)"
echo "   Você precisará desta chave para configurar o script 'server_monitor.php' no Master."
read -p "   Digite a Chave Secreta: " CRONJOB_SECRET_KEY
if [ -z "$CRONJOB_SECRET_KEY" ]; then
    echo "ERRO: A Chave Secreta é obrigatória."
    exit 1
fi

# 3. Detectar o IP desta VPS
detect_ip
if [ -z "$VPS_PUBLIC_IP" ]; then
    echo "ERRO: Não foi possível detectar o IP público desta VPS."
    exit 1
fi

echo "   -> IP Desta VPS (Load Balancer) detectado automaticamente: $VPS_PUBLIC_IP"
echo ""

# Confirmação
read -p "Confirmar a instalação com as informações acima? (s/n): " confirm
if [[ ! "$confirm" =~ ^[Ss]$ ]]; then
    echo "Instalação cancelada pelo usuário."
    exit 0
fi

# ====================================================================
# INÍCIO DO SETUP
# ====================================================================

echo "Iniciando a instalação do Load Balancer em: $VPS_PUBLIC_IP"

# 1. Atualizar o Sistema e Instalar Nginx
echo "Passo 1: Atualizando pacotes e instalando Nginx..."
apt update -y
apt install nginx curl -y

# 2. Configurar o Nginx como Proxy Reverso
echo "Passo 2: Configurando Nginx como Proxy Reverso..."

# Desativa a configuração padrão do Nginx
rm -f /etc/nginx/sites-enabled/default

# Conteúdo do arquivo de configuração do Nginx (Proxy Reverso)
NGINX_CONF=$(cat <<EOF
server {
    listen 80;
    server_name $VPS_PUBLIC_IP;
    
    # Adiciona a porta padrão para o proxy
    set \$proxy_stream_url \$uri;

    location / {
        # Proxy para o Servidor Principal (MASTER)
        proxy_pass http://$PANEL_MASTER_IP:\$STREAM_PORT;
        
        # Otimizações de streaming
        proxy_buffering off;
        proxy_cache off;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
        proxy_http_version 1.1;
        
        # Mascarar o Host e Referer para o Servidor Principal
        proxy_set_header Host \$host;
        proxy_set_header Referer http://\$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
    }
}
EOF
)

# Salva a configuração no Nginx
echo "$NGINX_CONF" > /etc/nginx/sites-available/loadbalancer.conf
ln -s /etc/nginx/sites-available/loadbalancer.conf /etc/nginx/sites-enabled/

# 3. Testar a Configuração e Reiniciar o Nginx
echo "Passo 3: Testando e reiniciando o Nginx..."
nginx -t
if [ $? -eq 0 ]; then
    systemctl restart nginx
    systemctl enable nginx
    echo "Nginx configurado e rodando com sucesso!"
else
    echo "ERRO: Falha na configuração do Nginx. Verifique o arquivo /etc/nginx/sites-available/loadbalancer.conf"
    exit 1
fi


# 4. Configurar Cronjob para Enviar Estatísticas (CRÍTICO)
echo "Passo 4: Configurando Cronjob de Monitoramento (a cada 5 minutos)..."

# O comando CURL simula o servidor secundário enviando estatísticas básicas (Load Average)
CRON_COMMAND="curl -s -k -X POST http://$PANEL_MASTER_IP/server_monitor.php \
    -d 'secret_key=$CRONJOB_SECRET_KEY&ip=$VPS_PUBLIC_IP&cpu_load=\$(cat /proc/loadavg | awk '{print \$1}')&status=1' \
    >/dev/null 2>&1"

(crontab -l 2>/dev/null; echo "*/5 * * * * $CRON_COMMAND") | crontab -

echo "Cronjob de monitoramento configurado!"

echo "================================================================"
echo "SUCESSO! INSTALAÇÃO DO LOAD BALANCER CONCLUÍDA!"
echo "Esta VPS (http://$VPS_PUBLIC_IP) agora está como proxy para o Painel Master."
echo ""
echo "AÇÕES NECESSÁRIAS NO PAINEL MASTER:"
echo "1. Adicione o IP $VPS_PUBLIC_IP na área 'Gerenciar Servidores'."
echo "2. CRIE o arquivo 'server_monitor.php' no seu Master para receber os dados."
echo "   CHAVE SECRETA USADA: $CRONJOB_SECRET_KEY"
echo "================================================================"
