<?php
ob_start();
session_start();
require_once 'conexao.php';

// --- 1. TRAVA DE SEGURANÇA TOTAL ---
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header("Location: login.php"); exit;
}

// APENAS ADMINISTRADOR PODE ACESSAR ESTA PÁGINA
$isAdmin = (isset($_SESSION['nivel']) && strtolower($_SESSION['nivel']) === 'admin');
if (!$isAdmin) {
    die("<!DOCTYPE html><html lang='pt-br'><body><h1 style='color:red; text-align:center; margin-top:50px;'>⛔ ACESSO RESTRITO AO ADMINISTRADOR</h1></body></html>");
}

$usuarioLogado = $_SESSION['usuario'];

// =========================================================================================
// ⚠️ ATENÇÃO: COLOQUE AQUI A URL DO SEU SERVIDOR CENTRAL ONDE FICARÁ O ARQUIVO JSON
// =========================================================================================
$URL_SERVIDOR_CENTRAL = "https://atlas.tvsbr.top/update/update.json";
// =========================================================================================

// --- 2. CONFIGURAÇÕES INICIAIS E BANCO DE DADOS ---
try { $connGeral->exec("ALTER TABLE site_config ADD COLUMN versao_sistema VARCHAR(20) DEFAULT '1.0.0'"); } catch (Exception $e) {}

$versao_atual = "1.0.0";
$nomePainel = "IPTV PANEL"; 
$corPrimaria = "#7367f0"; 

try {
    $conf = $connGeral->query("SELECT NomePainel, TemaPainel, versao_sistema FROM site_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if ($conf) {
        if (!empty($conf['NomePainel'])) $nomePainel = $conf['NomePainel'];
        if (!empty($conf['TemaPainel'])) $corPrimaria = $conf['TemaPainel'];
        if (!empty($conf['versao_sistema'])) $versao_atual = $conf['versao_sistema'];
    }
} catch (Exception $e) { }

// --- 3. LÓGICA DE ATUALIZAÇÃO (FILTRANDO INDEX, CONEXAO E VALIDADOR) ---
$msg = ""; $msg_tipo = "";
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['iniciar_atualizacao'])) {
    $url_zip = $_POST['url_zip'];
    $nova_versao = $_POST['nova_versao'];
    $arquivo_temp = 'update_temp.zip';

    // Baixar o arquivo ZIP do servidor central
    $fp = fopen($arquivo_temp, 'w+');
    $ch = curl_init($url_zip);
    curl_setopt($ch, CURLOPT_TIMEOUT, 300);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    fclose($fp);

    if ($http_code == 200 && file_exists($arquivo_temp)) {
        // Extrair os arquivos com filtro
        $zip = new ZipArchive;
        if ($zip->open($arquivo_temp) === TRUE) {
            
            $arquivos_para_extrair = [];
            
            // Lê o ZIP arquivo por arquivo
            for ($i = 0; $i < $zip->numFiles; $i++) {
                $nome_arquivo = $zip->getNameIndex($i);
                $nome_base = basename($nome_arquivo);
                
                // =========================================================
                // 🛑 A MÁGICA ACONTECE AQUI (IGNORAR ARQUIVOS SENSÍVEIS)
                // =========================================================
                if ($nome_base === 'index.php' || $nome_base === 'conexao.php' || $nome_base === 'validador.php') {
                    continue; // Pula a extração destes 3 arquivos
                }
                // =========================================================
                
                $arquivos_para_extrair[] = $nome_arquivo;
            }

            // Extrai apenas os arquivos que passaram na regra
            if (!empty($arquivos_para_extrair)) {
                $zip->extractTo('./', $arquivos_para_extrair); 
            }
            
            $zip->close();
            unlink($arquivo_temp); // Apaga o zip temporário

            // Atualiza a versão no banco de dados
            try {
                $connGeral->prepare("UPDATE site_config SET versao_sistema = ?")->execute([$nova_versao]);
                $versao_atual = $nova_versao;
                $msg = "Sistema atualizado com sucesso! (index.php, conexao.php e validador.php preservados).";
                $msg_tipo = "success";
            } catch (Exception $e) {
                $msg = "Arquivos atualizados, mas erro ao salvar versão no DB.";
                $msg_tipo = "warning";
            }
        } else {
            $msg = "Erro ao extrair o arquivo de atualização. Verifique as permissões da pasta.";
            $msg_tipo = "danger";
        }
    } else {
        $msg = "Erro ao fazer download da atualização. O servidor central pode estar offline.";
        $msg_tipo = "danger";
        if(file_exists($arquivo_temp)) unlink($arquivo_temp);
    }
}

// --- 4. VERIFICAR SE EXISTE ATUALIZAÇÃO NO SERVIDOR CENTRAL ---
$update_info = [
    'status' => 'offline',
    'versao' => $versao_atual,
    'changelog' => 'Não foi possível conectar ao servidor de atualizações. Verifique a URL configurada no arquivo atualizar.php',
    'url_zip' => ''
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $URL_SERVIDOR_CENTRAL);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 5); // Tenta por 5 segundos
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);

if ($response) {
    $json_remoto = json_decode($response, true);
    if ($json_remoto && isset($json_remoto['versao'])) {
        $update_info = [
            'status' => 'online',
            'versao' => $json_remoto['versao'],
            'changelog' => $json_remoto['changelog'] ?? 'Nenhuma nota de versão fornecida.',
            'url_zip' => $json_remoto['url_zip'] ?? ''
        ];
    }
}

// Verifica se a versão remota é maior que a atual
$tem_atualizacao = false;
if ($update_info['status'] == 'online') {
    if (version_compare($versao_atual, $update_info['versao'], '<')) {
        $tem_atualizacao = true;
    }
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Atualização | <?= htmlspecialchars($nomePainel) ?></title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    
    <?php include 'tema_global.php'; ?>

    <style>
        :root { --primary: <?= $corPrimaria ?>; --bg-body: #151521; --bg-card: #1e1e2d; --text-color: #d0d2d6; --border-color: #2b2b40; }
        body { background-color: var(--bg-body); color: var(--text-color); font-family: 'Segoe UI', sans-serif; margin: 0; padding: 0; }
        
        /* CORREÇÃO DO MENU LATERAL */
        .sidebar { width: 260px; height: 100vh; position: fixed; background: var(--bg-card); border-right: 1px solid var(--border-color); z-index: 1050; padding: 20px; overflow-y: auto; transition: transform 0.3s ease, box-shadow 0.3s ease; }
        .nav-link { color: #a6a6b7; padding: 12px 15px; border-radius: 8px; display: flex; align-items: center; gap: 12px; text-decoration: none; margin-bottom: 5px; font-weight: 500; transition: 0.2s; }
        .nav-link:hover, .nav-link.active { background: var(--primary); color: #fff; box-shadow: 0 4px 15px rgba(0,0,0,0.2); }
        .nav-group-title { font-size: 0.75rem; text-transform: uppercase; color: #5e5873; font-weight: 700; margin: 25px 0 10px 12px; letter-spacing: 1px; }
        .overlay { display: none; position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: rgba(0,0,0,0.7); z-index: 1040; backdrop-filter: blur(3px); }
        .overlay.show { display: block; }
        
        .main-content { margin-left: 260px; padding: 0; transition: 0.3s; min-height: 100vh; }
        .top-header { background: linear-gradient(90deg, var(--bg-card) 0%, var(--primary) 100%); padding: 15px 30px; display: flex; align-items: center; justify-content: space-between; border-bottom: 1px solid rgba(255,255,255,0.1); margin-bottom: 30px;}
        .header-title { font-size: 1.3rem; font-weight: 800; color: #fff; text-transform: uppercase; letter-spacing: 1px; margin: 0; }
        .mobile-toggle { display: none; color: #fff; font-size: 1.8rem; background: none; border: none; cursor: pointer; padding: 0 10px; }

        .card-custom { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; margin-bottom: 25px; box-shadow: 0 4px 15px rgba(0,0,0,0.1); }
        .card-header-custom { padding: 15px 20px; border-bottom: 1px solid var(--border-color); font-weight: 600; font-size: 1.1rem; color: #fff; display: flex; align-items: center; }
        .card-body-custom { padding: 25px; }

        .badge-version { padding: 8px 16px; border-radius: 50px; font-weight: bold; font-size: 1.2rem; display: inline-block; margin-top: 10px; }
        .badge-current { background: rgba(0, 207, 232, 0.2); border: 1px solid #00cfe8; color: #00cfe8; }
        .badge-new { background: rgba(40, 199, 111, 0.2); border: 1px solid #28c76f; color: #28c76f; }

        .changelog-box { background: rgba(0,0,0,0.2); border: 1px solid var(--border-color); border-radius: 8px; padding: 20px; font-family: monospace; color: #a6a6b7; min-height: 150px; white-space: pre-wrap; font-size: 0.9rem;}

        .warning-box { background: rgba(255, 159, 67, 0.1); border-left: 4px solid #ff9f43; padding: 15px; border-radius: 4px; margin-bottom: 20px;}
        .warning-box h6 { color: #ff9f43; font-weight: bold; margin-bottom: 8px; }
        .warning-box ul { margin: 0; padding-left: 20px; color: #d0d2d6; font-size: 0.9rem; }

        /* Loader Overlay */
        .update-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.9); z-index: 9999; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
        .spinner-border { width: 4rem; height: 4rem; color: #28c76f; margin-bottom: 20px; }

        @media (max-width: 992px) { 
            .sidebar { transform: translateX(-100%); } 
            .sidebar.show { transform: translateX(0); box-shadow: 5px 0 30px rgba(0,0,0,0.9); } 
            .main-content { margin-left: 0; width: 100%; }
            .mobile-toggle { display: block !important; margin-right: 15px; } 
        }
    </style>
</head>
<body>

<?php include 'menu.php'; ?>
<div class="overlay" id="overlay" onclick="toggleMenu()"></div>

<!-- Tela de Carregamento ao Atualizar -->
<div class="update-overlay" id="loadingOverlay">
    <div class="spinner-border" role="status"></div>
    <h3 class="text-white fw-bold">Atualizando Sistema...</h3>
    <p class="text-white-50 mt-2">Por favor, não feche esta janela ou desligue o servidor.<br>Isso pode levar alguns minutos.</p>
</div>

<main class="main-content">
    <div class="top-header">
        <div class="d-flex align-items-center">
            <button class="mobile-toggle" onclick="toggleMenu()"><i class="fas fa-bars"></i></button>
            <div class="header-title"><i class="fas fa-sync-alt me-2"></i> Atualização do Sistema</div>
        </div>
    </div>

    <div class="container-fluid px-3 px-md-4">
        
        <?php if($msg): ?>
            <div class="alert alert-<?= $msg_tipo ?> alert-dismissible fade show border-0 shadow-sm fw-bold">
                <?= $msg ?>
                <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
            </div>
        <?php endif; ?>

        <div class="row">
            <!-- COLUNA ESQUERDA: Versões -->
            <div class="col-md-5">
                <div class="card-custom">
                    <div class="card-body-custom">
                        <div class="mb-5">
                            <h5 class="text-white-50 mb-1"><i class="fas fa-info-circle me-2"></i> Versão Atual</h5>
                            <span class="badge-version badge-current">v<?= htmlspecialchars($versao_atual) ?></span>
                        </div>
                        
                        <div>
                            <h5 class="text-white-50 mb-1">
                                <i class="fas fa-arrow-circle-up me-2"></i> Nova Versão Disponível
                            </h5>
                            <?php if ($tem_atualizacao): ?>
                                <span class="badge-version badge-new">v<?= htmlspecialchars($update_info['versao']) ?></span>
                            <?php elseif ($update_info['status'] == 'offline'): ?>
                                <span class="badge-version bg-danger text-white border-danger">OFFLINE</span>
                            <?php else: ?>
                                <span class="badge-version bg-success text-white border-success">ATUALIZADO!</span>
                            <?php endif; ?>
                        </div>
                    </div>
                </div>

                <div class="card-custom">
                    <div class="card-header-custom">
                        <i class="fas fa-exclamation-triangle text-warning me-2"></i> Antes de Atualizar
                    </div>
                    <div class="card-body-custom pt-3">
                        <div class="warning-box">
                            <h6><i class="fas fa-shield-alt me-1"></i> IMPORTANTE:</h6>
                            <ul>
                                <li>Seus arquivos <b>index.php</b>, <b>conexao.php</b> e <b>validador.php</b> serão preservados.</li>
                                <li>Certifique-se de que a conexão do servidor está estável.</li>
                                <li><strong>NUNCA</strong> interrompa o processo de atualização recarregando a página.</li>
                            </ul>
                        </div>
                        
                        <?php if ($tem_atualizacao): ?>
                            <div class="form-check mb-3 mt-4">
                                <input class="form-check-input" type="checkbox" id="checkConfirmacao">
                                <label class="form-check-label text-white-50 small" for="checkConfirmacao">
                                    Confirmo que li e entendi os avisos acima.
                                </label>
                            </div>
                            
                            <form method="POST" id="formAtualizar" onsubmit="iniciarAtualizacao(event)">
                                <input type="hidden" name="iniciar_atualizacao" value="1">
                                <input type="hidden" name="url_zip" value="<?= htmlspecialchars($update_info['url_zip']) ?>">
                                <input type="hidden" name="nova_versao" value="<?= htmlspecialchars($update_info['versao']) ?>">
                                
                                <button type="submit" class="btn btn-success w-100 fw-bold py-3 shadow" id="btnUpdate" disabled>
                                    <i class="fas fa-download me-2"></i> ATUALIZAR PARA v<?= htmlspecialchars($update_info['versao']) ?>
                                </button>
                            </form>
                        <?php else: ?>
                            <button class="btn btn-secondary w-100 fw-bold py-3 shadow" disabled>
                                <i class="fas fa-check-circle me-2"></i> SISTEMA JÁ ATUALIZADO
                            </button>
                        <?php endif; ?>
                    </div>
                </div>
            </div>

            <!-- COLUNA DIREITA: Novidades (Changelog) -->
            <div class="col-md-7">
                <div class="card-custom h-100">
                    <div class="card-header-custom">
                        <i class="fas fa-file-alt text-info me-2"></i> Novidades da Versão <?= $tem_atualizacao ? htmlspecialchars($update_info['versao']) : htmlspecialchars($versao_atual) ?>
                    </div>
                    <div class="card-body-custom">
                        <div class="changelog-box"><?= htmlspecialchars($update_info['changelog']) ?></div>
                    </div>
                </div>
            </div>
        </div>

    </div>
</main>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
<script>
    function toggleMenu() { 
        const sidebar = document.getElementById('sidebar');
        const overlay = document.getElementById('overlay');
        if(sidebar) sidebar.classList.toggle('show'); 
        if(overlay) overlay.classList.toggle('show'); 
    }

    // Libera o botão de atualizar só se marcar a caixinha
    const checkConfirmacao = document.getElementById('checkConfirmacao');
    const btnUpdate = document.getElementById('btnUpdate');
    
    if (checkConfirmacao && btnUpdate) {
        checkConfirmacao.addEventListener('change', function() {
            btnUpdate.disabled = !this.checked;
        });
    }

    function iniciarAtualizacao(e) {
        if(!confirm("Deseja realmente iniciar a atualização do sistema? Este processo não pode ser interrompido.")) {
            e.preventDefault();
            return false;
        }
        // Mostra a tela preta de carregamento
        document.getElementById('loadingOverlay').style.display = 'flex';
    }
</script>
</body>
</html>