<?php
// Evita que o painel trave ao processar backups grandes
ini_set('memory_limit', '-1'); 
set_time_limit(0);
error_reporting(0); // Esconde os avisos para não quebrar a tela

session_start();
require_once 'config.php';

$pdo = getConexaoAtiva(); // Banco Principal
$pdo_int = getConexaoInterna(); // Banco Local

$pdo->exec("SET NAMES utf8mb4");
$pdo_int->exec("SET NAMES utf8mb4");

// ====================================================================
// 0. AUTO-CRIAÇÃO E VERIFICAÇÃO AUTOMÁTICA DA TABELA DE CONFIGURAÇÕES
// ====================================================================
try {
    // Cria a tabela painel_config caso ela não exista
    $pdo_int->exec("CREATE TABLE IF NOT EXISTS `painel_config` (
        `id` INT AUTO_INCREMENT PRIMARY KEY,
        `nome_painel` VARCHAR(255) DEFAULT 'TOP IPTV',
        `logo_url` VARCHAR(255) DEFAULT '',
        `cor_primaria` VARCHAR(50) DEFAULT '#007bff',
        `telegram_bot_token` VARCHAR(255) NULL,
        `telegram_chat_id` VARCHAR(255) NULL,
        `telegram_horario` VARCHAR(10) DEFAULT '03:00',
        `telegram_ativo` TINYINT(1) DEFAULT 0
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    // Garante que as colunas do Telegram existam caso a tabela já existisse antes
    $colunas_necessarias = [
        'telegram_bot_token' => "VARCHAR(255) NULL",
        'telegram_chat_id'   => "VARCHAR(255) NULL",
        'telegram_horario'   => "VARCHAR(10) DEFAULT '03:00'",
        'telegram_ativo'     => "TINYINT(1) DEFAULT 0"
    ];

    foreach ($colunas_necessarias as $coluna => $definicao) {
        try {
            $pdo_int->exec("ALTER TABLE `painel_config` ADD COLUMN `$coluna` $definicao");
        } catch (Exception $e) {
            // Coluna já existe, ignora o erro
        }
    }

    // Se a tabela estiver totalmente vazia, insere a primeira linha
    $qtd_reg = $pdo_int->query("SELECT COUNT(*) FROM `painel_config`")->fetchColumn();
    if ($qtd_reg == 0) {
        $pdo_int->exec("INSERT INTO `painel_config` (`nome_painel`, `cor_primaria`, `telegram_horario`, `telegram_ativo`) VALUES ('TOP IPTV', '#007bff', '03:00', 0)");
    }
} catch (Exception $e) {
    // Fallback de segurança
}

// ====================================================================
// INTELIGÊNCIA ARTIFICIAL: DETECTA SE É XUI ONE OU XTREAM UI
// ====================================================================
$modo_ativo = 'interno';
try {
    $modo_ativo = $pdo_int->query("SELECT modo_ativo FROM configuracoes LIMIT 1")->fetchColumn() ?: 'interno';
} catch (Exception $e) {}

$tabela_revendedores = ($modo_ativo === 'xui') ? '`users`' : '`reg_users`';

// --- INÍCIO: BUSCA DE PERSONALIZAÇÃO DINÂMICA ---
$nome_painel = 'TOP IPTV';
$logo_url = '';
$cor_primaria = '#007bff';

try {
    $config_painel = $pdo_int->query("SELECT * FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if ($config_painel) {
        $nome_painel = !empty($config_painel['nome_painel']) ? $config_painel['nome_painel'] : $nome_painel;
        $logo_url = !empty($config_painel['logo_url']) ? $config_painel['logo_url'] : $logo_url;
        $cor_primaria = !empty($config_painel['cor_primaria']) ? $config_painel['cor_primaria'] : $cor_primaria;
    }
} catch (Exception $e) {}

if (!isset($_SESSION['user_id'])) { header("Location: login.php"); exit; }

$role = $_SESSION['user_role'] ?? 'reseller'; 
$nome_usuario = $_SESSION['username'] ?? 'Usuário';
$user_id_logado = $_SESSION['user_id'];

// SOMENTE ADMIN PODE FAZER BACKUP
if ($role !== 'admin') {
    header("Location: dashboard.php");
    exit;
}

try { $user_credits = $pdo->query("SELECT credits FROM $tabela_revendedores WHERE id = " . intval($user_id_logado))->fetchColumn() ?: 0; } catch (Exception $e) { $user_credits = 0; }

$mensagem = "";

// ==============================================================================
// FUNÇÃO AUXILIAR: GERAR O CONTEÚDO SQL DO BACKUP (OTIMIZADO PARA NÃO DAR ERRO 500)
// ==============================================================================
function gerar_sql_dump_sistema($pdo, $nome_painel) {
    $tables = [];
    $stmt = $pdo->query("SHOW TABLES");
    while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
        $tables[] = $row[0];
    }

    $sql_dump = "-- ==========================================================\n";
    $sql_dump .= "-- Backup do Painel: " . $nome_painel . "\n";
    $sql_dump .= "-- Data de Geração: " . date('d/m/Y H:i:s') . "\n";
    $sql_dump .= "-- ==========================================================\n\n";
    $sql_dump .= "SET FOREIGN_KEY_CHECKS=0;\n\n";

    foreach ($tables as $table) {
        $sql_dump .= "-- Estrutura da tabela `$table`\n";
        $sql_dump .= "DROP TABLE IF EXISTS `$table`;\n";
        
        $row2 = $pdo->query("SHOW CREATE TABLE `$table`")->fetch(PDO::FETCH_NUM);
        $sql_dump .= $row2[1] . ";\n\n";

        $stmt_data = $pdo->query("SELECT * FROM `$table`");
        if ($stmt_data) {
            $has_data = false;
            // CORREÇÃO: Usando 'while' em vez de 'fetchAll' para não estourar a memória RAM e evitar Erro 500
            while ($row_data = $stmt_data->fetch(PDO::FETCH_ASSOC)) {
                if (!$has_data) {
                    $sql_dump .= "-- Dados da tabela `$table`\n";
                    $has_data = true;
                }
                $keys = array_keys($row_data);
                $keys_str = "`" . implode("`, `", $keys) . "`";
                $values_str = "";
                foreach ($row_data as $v) {
                    if ($v === null) {
                        $values_str .= "NULL,";
                    } else {
                        $values_str .= $pdo->quote($v) . ","; 
                    }
                }
                $values_str = rtrim($values_str, ",");
                $sql_dump .= "INSERT INTO `$table` ($keys_str) VALUES ($values_str);\n";
            }
            if ($has_data) {
                $sql_dump .= "\n\n";
            }
        }
    }
    $sql_dump .= "SET FOREIGN_KEY_CHECKS=1;\n";
    return $sql_dump;
}

// ==============================================================================
// 1. ROTINA DE GERAR BACKUP (DOWNLOAD)
// ==============================================================================
if (isset($_POST['fazer_backup'])) {
    $sql_dump = gerar_sql_dump_sistema($pdo, $nome_painel);

    // Força o navegador a baixar o arquivo .sql
    $nome_arquivo = 'backup_' . preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', strtolower($nome_painel))) . '_' . date('Y-m-d_H-i') . '.sql';
    header('Content-Type: application/sql');
    header('Content-Disposition: attachment; filename="' . $nome_arquivo . '"');
    header('Content-Length: ' . strlen($sql_dump));
    echo $sql_dump;
    exit;
}

// ==============================================================================
// 2. ROTINA DE RESTAURAR BACKUP (IMPORTAR .SQL OTIMIZADO)
// ==============================================================================
if (isset($_POST['importar_backup']) && isset($_FILES['arquivo_sql'])) {
    $arquivo = $_FILES['arquivo_sql']['tmp_name'];
    $nome_arq = $_FILES['arquivo_sql']['name'];
    
    if (empty($arquivo)) {
        $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-times-circle'></i> Por favor, selecione um arquivo .sql para restaurar.</div>";
    } else {
        $extensao = strtolower(pathinfo($nome_arq, PATHINFO_EXTENSION));
        if ($extensao !== 'sql') {
            $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-times-circle'></i> Formato inválido! Envie apenas arquivos .sql.</div>";
        } else {
            try {
                // CORREÇÃO: Lendo o arquivo pesado direto do disco para não travar o PHP 8
                $handle = fopen($arquivo, "r");
                if ($handle) {
                    $pdo->exec("SET FOREIGN_KEY_CHECKS=0;");
                    $templine = '';
                    while (($line = fgets($handle)) !== false) {
                        // Pula comentários e linhas vazias
                        if (substr($line, 0, 2) == '--' || trim($line) == '') continue;
                        
                        $templine .= $line;
                        // Se a linha termina com ponto e vírgula, executa o comando
                        if (substr(trim($line), -1, 1) == ';') {
                            $pdo->exec($templine);
                            $templine = '';
                        }
                    }
                    fclose($handle);
                    $pdo->exec("SET FOREIGN_KEY_CHECKS=1;");
                    
                    $mensagem = "<div class='alert success' style='background:rgba(40,167,69,0.1); border:1px solid var(--success); color:var(--success); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-check-circle'></i> <b>Backup Restaurado com Sucesso!</b> O banco de dados foi atualizado.</div>";
                } else {
                    throw new Exception("Não foi possível ler o arquivo enviado.");
                }
            } catch (Exception $e) {
                $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-exclamation-triangle'></i> <b>Erro ao restaurar:</b> " . $e->getMessage() . "</div>";
            }
        }
    }
}

// ==============================================================================
// 3. ROTINA DE SALVAR CONFIGURAÇÃO DO TELEGRAM E BACKUP AUTOMÁTICO
// ==============================================================================
if (isset($_POST['salvar_telegram_config'])) {
    $telegram_bot_token = trim($_POST['telegram_bot_token'] ?? '');
    $telegram_chat_id   = trim($_POST['telegram_chat_id'] ?? '');
    $telegram_horario   = trim($_POST['telegram_horario'] ?? '03:00');
    $telegram_ativo     = isset($_POST['telegram_ativo']) ? 1 : 0;

    try {
        $id_existente = $pdo_int->query("SELECT id FROM painel_config LIMIT 1")->fetchColumn();

        if ($id_existente) {
            $stmt = $pdo_int->prepare("UPDATE painel_config SET telegram_bot_token = ?, telegram_chat_id = ?, telegram_horario = ?, telegram_ativo = ? WHERE id = ?");
            $stmt->execute([$telegram_bot_token, $telegram_chat_id, $telegram_horario, $telegram_ativo, $id_existente]);
        } else {
            $stmt = $pdo_int->prepare("INSERT INTO painel_config (telegram_bot_token, telegram_chat_id, telegram_horario, telegram_ativo) VALUES (?, ?, ?, ?)");
            $stmt->execute([$telegram_bot_token, $telegram_chat_id, $telegram_horario, $telegram_ativo]);
        }

        $mensagem = "<div class='alert success' style='background:rgba(40,167,69,0.1); border:1px solid var(--success); color:var(--success); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-check-circle'></i> <b>Configurações do Telegram salvas com sucesso!</b></div>";
    } catch (Exception $e) {
        $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-exclamation-triangle'></i> Erro ao salvar configurações: " . $e->getMessage() . "</div>";
    }
}

// ==============================================================================
// 4. ROTINA DE ENVIAR BACKUP AGORA PARA O TELEGRAM (COM COMPRESSÃO ZIP AUTOMÁTICA)
// ==============================================================================
if (isset($_POST['enviar_telegram_agora'])) {
    $telegram_bot_token = trim($_POST['telegram_bot_token'] ?? '');
    $telegram_chat_id   = trim($_POST['telegram_chat_id'] ?? '');

    if (empty($telegram_bot_token) || empty($telegram_chat_id)) {
        $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-times-circle'></i> Preencha o Token do Bot e o Chat ID antes de disparar o envio.</div>";
    } else {
        try {
            // Salva as credenciais primeiro
            $id_existente = $pdo_int->query("SELECT id FROM painel_config LIMIT 1")->fetchColumn();
            if ($id_existente) {
                $stmt = $pdo_int->prepare("UPDATE painel_config SET telegram_bot_token = ?, telegram_chat_id = ? WHERE id = ?");
                $stmt->execute([$telegram_bot_token, $telegram_chat_id, $id_existente]);
            }

            // Gera o conteúdo SQL
            $sql_dump = gerar_sql_dump_sistema($pdo, $nome_painel);
            $temp_dir = sys_get_temp_dir();
            $prefixo = 'backup_' . preg_replace('/[^A-Za-z0-9_]/', '', str_replace(' ', '_', strtolower($nome_painel))) . '_' . date('Y-m-d_H-i');
            
            $nome_sql = $prefixo . '.sql';
            $caminho_sql = $temp_dir . '/' . $nome_sql;
            file_put_contents($caminho_sql, $sql_dump);

            // COMPRESSÃO EM .ZIP
            $caminho_envio = $caminho_sql;
            $nome_envio = $nome_sql;

            if (class_exists('ZipArchive')) {
                $nome_zip = $prefixo . '.zip';
                $caminho_zip = $temp_dir . '/' . $nome_zip;
                
                $zip = new ZipArchive();
                if ($zip->open($caminho_zip, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
                    $zip->addFile($caminho_sql, $nome_sql);
                    $zip->close();
                    
                    @unlink($caminho_sql); // Remove o SQL bruto para economizar espaço
                    $caminho_envio = $caminho_zip;
                    $nome_envio = $nome_zip;
                }
            }

            // CORREÇÃO: Garante que o arquivo existe antes de enviar para não quebrar o cURL no PHP 8
            if (!file_exists($caminho_envio)) {
                throw new Exception("Falha ao gerar o arquivo de backup no servidor (Verifique espaço em disco).");
            }

            // Dispara via API cURL do Telegram
            $url = "https://api.telegram.org/bot{$telegram_bot_token}/sendDocument";
            $post_fields = [
                'chat_id' => $telegram_chat_id,
                'caption' => "⚡ *Backup Manual Solicitado*\n\n⚙️ *Painel:* {$nome_painel}\n📅 *Data:* " . date('d/m/Y H:i:s') . "\n📦 *Arquivo:* {$nome_envio}",
                'parse_mode' => 'Markdown',
                'document' => new CURLFile($caminho_envio)
            ];

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type:multipart/form-data"));
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 60); // Evita trava eterna do servidor
            curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
            
            $response = curl_exec($ch);
            $err = curl_error($ch);
            curl_close($ch);

            @unlink($caminho_envio); // Limpa o arquivo temp gerado

            // PROTEÇÃO PHP 8: Evita o erro 500 fatal transformando um "false" num JSON tratável
            if ($response === false) {
                $response = json_encode([
                    'ok' => false, 
                    'description' => "Falha no cURL: $err. (Verifique se o banco não excede os 50MB permitidos pelo Telegram)."
                ]);
            }

            $res_json = json_decode($response, true);
            if (isset($res_json['ok']) && $res_json['ok'] === true) {
                $mensagem = "<div class='alert success' style='background:rgba(40,167,69,0.1); border:1px solid var(--success); color:var(--success); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-paper-plane'></i> <b>Sucesso!</b> Backup enviado com sucesso para o Telegram.</div>";
            } else {
                $erro_desc = $res_json['description'] ?? 'Erro desconhecido ao comunicar com a API do Telegram.';
                if (strpos($erro_desc, 'Request Entity Too Large') !== false) {
                    $erro_desc .= " (O banco de dados é maior que o limite de 50MB aceito pelo Telegram. Faça o download manual no botão azul).";
                }
                $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-exclamation-triangle'></i> <b>Erro no envio:</b> " . htmlspecialchars($erro_desc) . "</div>";
            }

        } catch (Exception $e) {
            $mensagem = "<div class='alert error' style='background:rgba(220,53,69,0.1); border:1px solid var(--danger); color:var(--danger); padding:15px; border-radius:8px; margin-bottom:20px;'><i class='fas fa-exclamation-triangle'></i> Erro: " . $e->getMessage() . "</div>";
        }
    }
}

// Recarrega os dados atualizados para preencher os inputs da tela
$config_painel = $pdo_int->query("SELECT * FROM painel_config LIMIT 1")->fetch(PDO::FETCH_ASSOC);
$tg_token   = $config_painel['telegram_bot_token'] ?? '';
$tg_chat_id = $config_painel['telegram_chat_id'] ?? '';
$tg_horario = $config_painel['telegram_horario'] ?? '03:00';
$tg_ativo   = $config_painel['telegram_ativo'] ?? 0;

$caminho_cron_vps = dirname(__FILE__) . '/cron_backup_telegram.php';
$protocolo = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url_cron_http = $protocolo . $_SERVER['HTTP_HOST'] . dirname($_SERVER['REQUEST_URI']) . '/cron_backup_telegram.php';
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <link rel="stylesheet" href="tema.css">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>Backup do Sistema - <?php echo htmlspecialchars($nome_painel); ?></title>
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
    <style>
        :root { 
            --bg-dark: #0f1114; 
            --bg-sidebar: #1e2227; 
            --bg-card: #272c33; 
            --text-main: #d1d5da; 
            --text-muted: #8a94a1; 
            --accent: <?php echo $cor_primaria; ?>; 
            --border-color: #3a4149; 
            --success: #28a745; 
            --danger: #dc3545; 
            --warning: #f39c12;
            --info: #17a2b8;
        }
        body { margin: 0; font-family: 'Segoe UI', sans-serif; background-color: var(--bg-dark); color: var(--text-main); display: flex; height: 100vh; overflow: hidden; }

        /* SIDEBAR */
        .sidebar { width: 260px; background-color: var(--bg-sidebar); border-right: 1px solid var(--border-color); display: flex; flex-direction: column; transition: all 0.3s ease; z-index: 1001; }
        .sidebar-header { padding: 25px 20px; text-align: center; font-size: 22px; font-weight: bold; border-bottom: 1px solid var(--border-color); color: white; }
        .sidebar-header span { color: var(--accent); }
        .sidebar-logo { max-width: 180px; max-height: 60px; object-fit: contain; }
        .user-info { padding: 20px; text-align: center; border-bottom: 1px solid var(--border-color); }
        .user-info .badge { background: rgba(255, 255, 255, 0.05); color: var(--accent); padding: 4px 10px; border-radius: 4px; font-size: 11px; text-transform: uppercase; font-weight: bold; margin-top: 5px; display: inline-block; }
        .user-info .credits-badge { display: block; margin-top: 10px; color: var(--success); font-weight: bold; font-size: 13px; }
        .menu-list { list-style: none; padding: 0; margin: 0; flex: 1; overflow-y: auto; }
        .menu-item { padding: 14px 25px; color: var(--text-main); text-decoration: none; display: flex; align-items: center; transition: 0.2s; font-size: 15px; border-left: 4px solid transparent; cursor: pointer; }
        .menu-item i:first-child { margin-right: 15px; width: 20px; text-align: center; font-size: 16px; color: var(--text-muted); }
        .menu-item:hover, .menu-item.active { background: #2c3138; color: white; border-left-color: var(--accent); }
        .submenu { display: none; background: #121519; list-style: none; padding: 0; margin: 0; }
        .submenu .menu-item { padding-left: 52px; font-size: 14px; border-left: none; }
        .arrow-icon { margin-left: auto; transition: 0.3s; font-size: 12px; }
        .rotate { transform: rotate(180deg); }
        .menu-category { padding: 20px 25px 8px; font-size: 11px; text-transform: uppercase; color: var(--text-muted); font-weight: bold; letter-spacing: 1px; }
        .logout-btn { padding: 15px; background-color: var(--danger); color: white; text-align: center; text-decoration: none; font-weight: bold; margin-top: auto; }

        /* MAIN CONTENT */
        .main { flex: 1; display: flex; flex-direction: column; overflow-y: auto; width: 100%; position: relative; }
        .topbar { display: flex; justify-content: space-between; align-items: center; padding: 15px 30px; background-color: var(--bg-sidebar); border-bottom: 1px solid var(--border-color); }
        .content-area { padding: 25px; flex: 1; max-width: 1000px; margin: 0 auto; width: 100%; box-sizing: border-box; }
        .mode-badge { padding: 6px 15px; background: rgba(0, 123, 255, 0.15); color: var(--accent); border-radius: 20px; font-size: 12px; font-weight: bold; border: 1px solid var(--accent); white-space: nowrap; display: inline-block; }

        /* GRID E CARDS DE BACKUP */
        .backup-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 20px; margin-top: 20px; }
        .backup-card { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 10px; padding: 30px; text-align: center; position: relative; overflow: hidden; }
        
        .backup-icon { font-size: 50px; margin-bottom: 15px; }
        .backup-title { font-size: 20px; color: white; font-weight: bold; margin-bottom: 10px; }
        .backup-desc { font-size: 14px; color: var(--text-muted); margin-bottom: 25px; line-height: 1.5; }
        
        .btn-blue { background: var(--accent); color: white; border: none; padding: 14px 20px; border-radius: 6px; font-weight: bold; cursor: pointer; width: 100%; transition: 0.2s; font-size: 15px; }
        .btn-blue:hover { filter: brightness(0.9); }
        
        .btn-green { background: var(--success); color: white; border: none; padding: 14px 20px; border-radius: 6px; font-weight: bold; cursor: pointer; width: 100%; transition: 0.2s; font-size: 15px; margin-top: 15px; }
        .btn-green:hover { filter: brightness(0.9); }

        .btn-telegram { background: #0088cc; color: white; border: none; padding: 14px 20px; border-radius: 6px; font-weight: bold; cursor: pointer; width: 100%; transition: 0.2s; font-size: 15px; margin-top: 10px; }
        .btn-telegram:hover { filter: brightness(0.9); }

        .btn-send-now { background: #2b5278; color: white; border: none; padding: 12px 20px; border-radius: 6px; font-weight: bold; cursor: pointer; width: 100%; transition: 0.2s; font-size: 14px; margin-top: 10px; display: flex; align-items: center; justify-content: center; gap: 8px; }
        .btn-send-now:hover { background: #1f3d5c; }

        .btn-tutorial { background: #17a2b8; color: white; border: none; padding: 10px 18px; border-radius: 6px; font-weight: bold; cursor: pointer; transition: 0.2s; font-size: 13px; margin-bottom: 15px; display: inline-flex; align-items: center; gap: 8px; }
        .btn-tutorial:hover { filter: brightness(0.9); }

        input[type="file"], input[type="text"], input[type="time"] { width: 100%; padding: 12px; background: #121519; border: 1px dashed var(--border-color); color: white; border-radius: 6px; box-sizing: border-box; font-size: 14px; margin-bottom: 10px; }
        input[type="text"], input[type="time"] { border-style: solid; text-align: left; }
        input[type="file"]::file-selector-button { background: #2c3138; color: white; border: none; padding: 8px 15px; border-radius: 4px; cursor: pointer; margin-right: 10px; font-weight: bold; }

        .menu-toggle { display: none; background: none; border: none; color: white; font-size: 24px; cursor: pointer; }
        .sidebar-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.7); z-index: 1000; }

        /* MODAL TUTORIAL */
        .modal-bg { display: none; position: fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.8); z-index:2000; justify-content:center; align-items:center; padding: 15px; box-sizing: border-box; }
        .modal-body { background: var(--bg-card); width: 100%; max-width: 650px; max-height: 90vh; overflow-y: auto; border-radius: 10px; padding: 25px; border: 1px solid var(--border-color); color: var(--text-main); text-align: left; }
        .modal-header { display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid var(--border-color); padding-bottom: 15px; margin-bottom: 15px; }
        .modal-close { background: none; border: none; color: white; font-size: 20px; cursor: pointer; }
        .code-block { background: #121519; padding: 12px; border-radius: 6px; font-family: monospace; font-size: 12px; border: 1px solid var(--border-color); word-break: break-all; color: #f1c40f; margin: 10px 0; }

        /* FORÇA A COR AZUL NO ADMINISTRADOR E VERDE NO SALDO */
        .user-info > div:nth-child(2), .user-info .badge { background: rgba(0, 123, 255, 0.2) !important; color: var(--accent) !important; padding: 4px 10px !important; border-radius: 4px !important; font-size: 11px !important; text-transform: uppercase !important; font-weight: bold !important; margin-top: 5px !important; margin-bottom: 5px !important; display: inline-block !important; }
        .user-info > div:nth-child(3), .user-info .credits-badge, .user-info i.fa-coins { color: var(--success) !important; font-weight: bold !important; font-size: 13px !important; display: inline-block !important; }
        .user-info > div:nth-child(3) { margin-top: 8px !important; display: block !important; }

        /* FORÇA OS ÍCONES DA SIDEBAR A FICAREM AZUIS */
        .sidebar i, .sidebar span[class*="icon"], .sidebar .fas, .sidebar .fab { color: var(--accent) !important; }
        .menu-item i:first-child { margin-right: 12px; width: 20px; text-align: center; color: var(--accent) !important; }
        .menu-item:hover, .menu-item.active { background-color: #2c3138 !important; color: white !important; border-left-color: var(--accent) !important; }
        .sidebar .active, .sidebar .menu-item.active, .sidebar li.active > a { border-left-color: var(--accent) !important; color: white !important; background: #24282d !important; }
        .sidebar a:hover, .sidebar .menu-item:hover { border-left-color: var(--accent) !important; color: white !important; background: #2c3138 !important; }

        @media (max-width: 768px) {
            .sidebar { position: fixed; left: -260px; height: 100%; }
            .sidebar.active { left: 0; }
            .sidebar-overlay.active { display: block; }
            .menu-toggle { display: block; margin-right: 15px; }
            .topbar { padding: 15px 20px; justify-content: flex-start; }
            .topbar-right { margin-left: auto; }
            .content-area { padding: 15px; }
        }
    </style>
</head>
<body>

    <div class="sidebar-overlay" id="overlay" onclick="toggleMenu()"></div>

    <?php include 'sidebar.php'; ?>

    <div class="main">
        <header class="topbar">
            <div style="display: flex; align-items: center;">
                <button class="menu-toggle" id="btn-menu" onclick="toggleMenu()"><i class="fas fa-bars"></i></button>
                <h2 style="margin:0; color: white; margin-left: 10px;">Gerenciador de Banco de Dados</h2>
            </div>
            <div class="topbar-right">
                <span class="mode-badge"><i class="fas fa-shield-alt"></i> MODO: <?php echo defined('MODO_SISTEMA') ? strtoupper(MODO_SISTEMA) : strtoupper($modo_ativo); ?></span>
            </div>
        </header>

        <div class="content-area">
            
            <p style="color: var(--text-muted); font-size: 14px; margin-bottom: 25px;">Faça o download de toda a estrutura e dados do seu painel para o seu computador, ou restaure um backup antigo. É recomendado fazer o backup <b>antes</b> de executar limpezas pesadas ou grandes importações.</p>

            <?php echo $mensagem; ?>

            <div class="backup-grid">
                
                <div class="backup-card" style="border-top: 4px solid var(--accent);">
                    <i class="fas fa-cloud-download-alt backup-icon" style="color: var(--accent);"></i>
                    <div class="backup-title">Fazer Backup</div>
                    <div class="backup-desc">Gera um arquivo <b>.sql</b> contendo todos os clientes, canais, revendedores e configurações atuais do seu servidor.</div>
                    
                    <form method="POST">
                        <button type="submit" name="fazer_backup" class="btn-blue">
                            <i class="fas fa-download"></i> BAIXAR ARQUIVO .SQL
                        </button>
                    </form>
                </div>

                <div class="backup-card" style="border-top: 4px solid var(--success);">
                    <i class="fas fa-cloud-upload-alt backup-icon" style="color: var(--success);"></i>
                    <div class="backup-title">Restaurar Backup</div>
                    <div class="backup-desc" style="color: #e74c3c;"><b>Atenção:</b> Esta ação irá sobrescrever o banco de dados atual com os dados do arquivo selecionado.</div>
                    
                    <form method="POST" enctype="multipart/form-data" onsubmit="return confirm('Você tem CERTEZA ABSOLUTA que deseja restaurar? Isso apagará os dados atuais do painel!');">
                        <input type="file" name="arquivo_sql" accept=".sql" required>
                        <button type="submit" name="importar_backup" class="btn-green">
                            <i class="fas fa-upload"></i> RESTAURAR DADOS
                        </button>
                    </form>
                </div>

                <div class="backup-card" style="border-top: 4px solid #0088cc; grid-column: 1 / -1;">
                    <i class="fab fa-telegram backup-icon" style="color: #0088cc;"></i>
                    <div class="backup-title">Backup Automático via Telegram</div>
                    <div class="backup-desc">Configure o envio automático do arquivo <b>.sql / .zip</b> direto para seu Bot do Telegram em horário programado ou envie um backup manual instantâneo.</div>
                    
                    <button type="button" class="btn-tutorial" onclick="abrirModalTutorial()">
                        <i class="fas fa-book"></i> TUTORIAL DE CONFIGURAÇÃO & CRON
                    </button>

                    <form method="POST" style="text-align: left; max-width: 600px; margin: 0 auto;">
                        <label style="font-size:12px; color:var(--text-muted); font-weight:bold;">TOKEN DO BOT DO TELEGRAM:</label>
                        <input type="text" name="telegram_bot_token" value="<?php echo htmlspecialchars($tg_token); ?>" placeholder="Ex: 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ" required>

                        <label style="font-size:12px; color:var(--text-muted); font-weight:bold;">CHAT ID DO TELEGRAM:</label>
                        <input type="text" name="telegram_chat_id" value="<?php echo htmlspecialchars($tg_chat_id); ?>" placeholder="Ex: 987654321 ou -100xxxxxxxxxx" required>

                        <div style="display: flex; gap: 15px; align-items: center; margin-top: 10px;">
                            <div style="flex: 1;">
                                <label style="font-size:12px; color:var(--text-muted); font-weight:bold;">HORÁRIO PROGRAMADO:</label>
                                <input type="time" name="telegram_horario" value="<?php echo htmlspecialchars($tg_horario); ?>" required>
                            </div>
                            <div style="flex: 1; text-align: center; padding-top: 15px;">
                                <label style="cursor: pointer; color: white; font-weight: bold; font-size: 14px;">
                                    <input type="checkbox" name="telegram_ativo" value="1" <?php echo $tg_ativo ? 'checked' : ''; ?>> Ativar Envio Automático
                                </label>
                            </div>
                        </div>

                        <button type="submit" name="salvar_telegram_config" class="btn-telegram">
                            <i class="fas fa-save"></i> SALVAR CONFIGURAÇÕES DO TELEGRAM
                        </button>

                        <button type="submit" name="enviar_telegram_agora" class="btn-send-now">
                            <i class="fas fa-paper-plane"></i> ENVIAR BACKUP AGORA PARA O TELEGRAM
                        </button>
                    </form>
                </div>

            </div>

        </div>
        <?php include 'rodape.php'; ?>
    </div>

    <div class="modal-bg" id="modalTutorial">
        <div class="modal-body">
            <div class="modal-header">
                <h3 style="margin:0; color:white;"><i class="fab fa-telegram" style="color:#0088cc;"></i> Tutorial: Backup no Telegram</h3>
                <button class="modal-close" onclick="fecharModalTutorial()">&times;</button>
            </div>
            
            <h4 style="color:var(--info); margin-bottom:5px;">1. Criar Bot no Telegram:</h4>
            <p style="font-size:13px; color:var(--text-muted); margin-top:0;">
                • Abra o Telegram e procure por <b>@BotFather</b>.<br>
                • Envie o comando <code>/newbot</code>, escolha um nome e usuário.<br>
                • Copie o <b>API TOKEN</b> gerado e cole no campo "TOKEN DO BOT" no painel.
            </p>

            <h4 style="color:var(--info); margin-bottom:5px;">2. Obter seu CHAT ID:</h4>
            <p style="font-size:13px; color:var(--text-muted); margin-top:0;">
                • Abra o Telegram e procure por <b>@userinfobot</b> ou <b>@getidsbot</b>.<br>
                • Dê um <code>/start</code> para ver seu ID numérico e cole no campo "CHAT ID".<br>
                • <b>Importante:</b> Inicie uma conversa com seu novo Bot enviando <code>/start</code> nele para que ele possa te enviar arquivos.
            </p>

            <hr style="border-color:var(--border-color); margin: 15px 0;">

            <h4 style="color:var(--warning); margin-bottom:5px;">3. Configurar CRON na VPS (Terminal SSH):</h4>
            <p style="font-size:13px; color:var(--text-muted); margin-top:0;">
                Execute <code>crontab -e</code> no seu servidor VPS e adicione a linha abaixo:
            </p>
            <div class="code-block">0 * * * * php <?php echo $caminho_cron_vps; ?> >/dev/null 2>&1</div>

            <h4 style="color:var(--warning); margin-bottom:5px;">4. Configurar CRON em Hospedagem (cPanel / AApanel / DirectAdmin):</h4>
            <p style="font-size:13px; color:var(--text-muted); margin-top:0;">
                No menu "Tarefas Cron" ou "Cron Jobs" da hospedagem, configure para rodar de hora em hora executando este URL ou Comando:
            </p>
            <p style="font-size:12px; color:white; margin-bottom:2px;"><b>Via Wget/Curl (Recomendado):</b></p>
            <div class="code-block">wget -q -O - <?php echo $url_cron_http; ?> >/dev/null 2>&1</div>
            
            <p style="font-size:12px; color:white; margin-bottom:2px;"><b>Via PHP Direct:</b></p>
            <div class="code-block">php <?php echo $caminho_cron_vps; ?></div>

            <button type="button" class="btn-blue" style="margin-top:15px;" onclick="fecharModalTutorial()">ENTENDI!</button>
        </div>
    </div>

    <script>
        // Lógica do Menu Lateral Responsivo e Submenus
        const sidebar = document.getElementById('sidebar');
        const overlay = document.getElementById('overlay');
        
        function toggleMenu() { 
            if(sidebar) sidebar.classList.toggle('active'); 
            if(overlay) overlay.classList.toggle('active'); 
        }

        function toggleSubmenu(id) {
            const sub = document.getElementById(id);
            const arrow = document.getElementById('arrow-' + id);
            if (sub.style.display === "block") { sub.style.display = "none"; if(arrow) arrow.classList.remove('rotate'); } 
            else { sub.style.display = "block"; if(arrow) arrow.classList.add('rotate'); }
        }

        function abrirModalTutorial() {
            document.getElementById('modalTutorial').style.display = 'flex';
        }

        function fecharModalTutorial() {
            document.getElementById('modalTutorial').style.display = 'none';
        }
    </script>
    <script src="tema.js"></script>
</body>
</html>
