#!/bin/bash

# CORES PARA O TERMINAL
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
NC='\033[0m'

clear
echo -e "${GREEN}=================================================${NC}"
echo -e "${GREEN}   INSTALADOR AUTOMÁTICO - LOAD BALANCE IPTV     ${NC}"
echo -e "${GREEN}=================================================${NC}"
echo ""

# 1. VERIFICAÇÃO DE ROOT
if [ "$EUID" -ne 0 ]; then
  echo -e "${RED}Por favor, execute como ROOT (sudo su)${NC}"
  exit
fi

# 2. COLETA DE DADOS
echo -e "${YELLOW}>>> Precisamos dos dados da VPS MASTER (Onde está o Painel)${NC}"
echo ""
read -p "Digite o IP da VPS Master: " MASTER_IP
read -p "Nome do Banco de Dados (ex: xtream_iptv): " DB_NAME
read -p "Usuário Remoto do Banco (ex: usuario_remoto): " DB_USER
read -p "Senha do Usuário Remoto: " DB_PASS
echo ""
echo -e "${YELLOW}Iniciando instalação... Isso pode demorar 2 minutos.${NC}"
sleep 2

# 3. ATUALIZAÇÃO E INSTALAÇÃO DE PACOTES
apt-get update -y
apt-get upgrade -y
# Instala Apache, PHP e FFMPEG
apt-get install -y apache2 php libapache2-mod-php php-mysql php-curl ffmpeg unzip

# Habilita mod rewrite (opcional, mas bom ter)
a2enmod rewrite
systemctl restart apache2

# 4. LIMPEZA E CRIAÇÃO DE PASTAS
rm -rf /var/www/html/index.html
mkdir -p /var/www/html/includes

# 5. CRIAR ARQUIVO DE CONEXÃO (db.php)
echo -e "${GREEN}>>> Criando conexão com o banco...${NC}"

cat <<EOF > /var/www/html/includes/db.php
<?php
// includes/db.php - GERADO AUTOMATICAMENTE
\$host = '$MASTER_IP';
\$dbname = '$DB_NAME';
\$username = '$DB_USER';
\$password = '$DB_PASS';

try {
    \$pdo = new PDO("mysql:host=\$host;dbname=\$dbname;charset=utf8", \$username, \$password);
    \$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException \$e) {
    die("Erro Crítico - Não foi possível conectar ao Painel Master: " . \$e->getMessage());
}
?>
EOF

# 6. CRIAR ARQUIVO DE STREAM (stream.php)
echo -e "${GREEN}>>> Configurando sistema de transmissão (FFMPEG)...${NC}"

# Usamos 'EOF' com aspas para o bash não tentar interpretar as variáveis do PHP
cat << 'EOF' > /var/www/html/stream.php
<?php
// stream.php - LOAD BALANCE SLAVE (FFMPEG)
set_time_limit(0);
error_reporting(0);
ini_set('display_errors', 0);

require_once 'includes/db.php';

$username = $_GET['username'] ?? '';
$password = $_GET['password'] ?? '';
$stream_id = (int)($_GET['stream'] ?? 0);
$type = $_GET['type'] ?? 'live'; 

// Valida no Master
$stmt = $pdo->prepare("SELECT id, username, active, expire_date FROM users WHERE username = ? AND password = ? LIMIT 1");
$stmt->execute([$username, $password]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$user || $user['active'] == 0) { http_response_code(403); exit; }

// Pega o Link
$real_link = "";
if ($type == 'live') {
    $r = $pdo->query("SELECT stream_url FROM channels WHERE id=$stream_id")->fetch(PDO::FETCH_ASSOC);
    if($r) $real_link = $r['stream_url'];
} elseif ($type == 'movie') {
    $r = $pdo->query("SELECT stream_url FROM movies WHERE id=$stream_id")->fetch(PDO::FETCH_ASSOC);
    if($r) $real_link = $r['stream_url'];
}

if (empty($real_link)) { http_response_code(404); exit; }

// FFMPEG
$ffmpeg_bin = '/usr/bin/ffmpeg'; 
$ua_fake = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36";

header('Content-Type: video/mp2t');

// Comando Otimizado para Repasse
$cmd = "$ffmpeg_bin -reconnect 1 -reconnect_streamed 1 -reconnect_delay_max 5 -user_agent \"$ua_fake\" -i \"$real_link\" -c copy -f mpegts -bufsize 1024k pipe:1 2>/dev/null";

$handle = popen($cmd, 'r');
if ($handle) {
    while (!feof($handle)) {
        if (connection_aborted()) break;
        echo fread($handle, 16384);
        if (ob_get_length() > 0) ob_flush();
        flush();
    }
    pclose($handle);
}
exit;
?>
EOF

# 7. PERMISSÕES FINAIS
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

# 8. FINALIZAÇÃO
PUBLIC_IP=$(curl -s ifconfig.me)
echo ""
echo -e "${GREEN}=================================================${NC}"
echo -e "${GREEN}   INSTALAÇÃO CONCLUÍDA COM SUCESSO!             ${NC}"
echo -e "${GREEN}=================================================${NC}"
echo ""
echo -e "Agora vá no seu Painel Master > Sistema > Load Balance e adicione:"
echo ""
echo -e "Nome: ${YELLOW}Servidor LB 01${NC}"
echo -e "Domínio: ${YELLOW}http://$PUBLIC_IP${NC}"
echo -e "IP: ${YELLOW}$PUBLIC_IP${NC}"
echo ""
echo -e "${RED}IMPORTANTE:${NC} Certifique-se de que a porta 3306 está aberta no firewall do Master!"
echo ""