<?php
session_start();
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) { header("Location: index.php"); exit; }
if ($_SESSION['nivel'] !== 'admin') { header("Location: index.php"); exit; }

require_once 'conexao.php'; 
require_once 'funcao_backup.php'; 

// --- CORREÇÃO DE ERROS DO MENU LATERAL ---
$isAdmin = true; 
$total_msg_nao_lidas = 0; 
// ----------------------------------------

// --- CRIAÇÃO SILENCIOSA DOS CAMPOS DE NUVEM NO BANCO DE DADOS E TABELA DE BACKUPS ---
try {
    $connGeral->exec("CREATE TABLE IF NOT EXISTS arquivo_backup (
        id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        local VARCHAR(255) DEFAULT '',
        data DATETIME DEFAULT NULL,
        tipo VARCHAR(50) DEFAULT 'Manual',
        size VARCHAR(50) DEFAULT '0 MB'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;");

    $connGeral->exec("ALTER TABLE backup_automatizado ADD COLUMN nuvem_status VARCHAR(20) DEFAULT 'inativo'");
    $connGeral->exec("ALTER TABLE backup_automatizado ADD COLUMN nuvem_provedor VARCHAR(50) DEFAULT 'telegram'");
    $connGeral->exec("ALTER TABLE backup_automatizado ADD COLUMN nuvem_token TEXT");
    $connGeral->exec("ALTER TABLE backup_automatizado ADD COLUMN nuvem_pasta VARCHAR(100) DEFAULT ''");
} catch(Exception $e) { /* Ignora se as colunas/tabelas já existirem */ }
// ----------------------------------------------------------------

$msg = ""; $msg_tipo = "";

// --- 1. BUSCA CONFIGURAÇÕES DO SITE (NOME E COR) ---
$nomePainel = "IPTV PANEL"; 
$corPrimaria = "#7367f0"; 
try {
    $conf = $connGeral->query("SELECT NomePainel, TemaPainel FROM site_config WHERE id=1 LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    if ($conf) {
        if (!empty($conf['NomePainel'])) $nomePainel = $conf['NomePainel'];
        if (!empty($conf['TemaPainel'])) $corPrimaria = $conf['TemaPainel'];
    }
} catch (Exception $e) { }

// --- 2. AÇÕES DE BACKUP E NUVEM ---
if (isset($_POST['gerar_manual'])) {
    // Força a criação da pasta e aplicação de permissão máxima via PHP antes de rodar
    $dir_bkp = __DIR__ . '/backups';
    if (!is_dir($dir_bkp)) {
        @mkdir($dir_bkp, 0777, true);
    }
    @chmod($dir_bkp, 0777);

    // Agora ele captura a resposta do Telegram e joga na tela
    $resultado_telegram = gerarBackupCompleto('Manual');
    
    // Mudado para validação estrita (!== false) para evitar falsos negativos
    if ($resultado_telegram !== false) {
        $_SESSION['temp_msg'] = "<strong>Backup gerado com sucesso!</strong><br>" . $resultado_telegram; 
        $_SESSION['temp_msg_tipo'] = "success";
    } else {
        $_SESSION['temp_msg'] = "Erro ao criar arquivo de Backup. Verifique as permissões ou a extensão ZipArchive no cPanel."; 
        $_SESSION['temp_msg_tipo'] = "danger";
    }
    header("Location: gerenciar_backups.php");
    exit;
}

if (isset($_POST['salvar_auto'])) {
    $status = isset($_POST['status']) ? 'ativo' : 'inativo';
    $tempo  = $_POST['tempo'];
    $horario = $_POST['horario'];
    $check = $connGeral->query("SELECT id FROM backup_automatizado WHERE id=1")->fetch();
    if ($check) {
        $connGeral->prepare("UPDATE backup_automatizado SET status=?, tempo=?, horario=? WHERE id=1")->execute([$status, $tempo, $horario]);
    } else {
        $connGeral->prepare("INSERT INTO backup_automatizado (id, status, tempo, horario) VALUES (1, ?, ?, ?)")->execute([$status, $tempo, $horario]);
    }
    $_SESSION['temp_msg'] = "Configuração da rotina automática salva!"; 
    $_SESSION['temp_msg_tipo'] = "info";
    header("Location: gerenciar_backups.php");
    exit;
}

if (isset($_POST['salvar_nuvem'])) {
    $n_status = isset($_POST['nuvem_status']) ? 'ativo' : 'inativo';
    $n_prov = 'telegram'; // Forçado para o telegram
    $n_token = trim($_POST['nuvem_token']);
    $n_pasta = trim($_POST['nuvem_pasta']);
    
    $check = $connGeral->query("SELECT id FROM backup_automatizado WHERE id=1")->fetch();
    if ($check) {
        $connGeral->prepare("UPDATE backup_automatizado SET nuvem_status=?, nuvem_provedor=?, nuvem_token=?, nuvem_pasta=? WHERE id=1")->execute([$n_status, $n_prov, $n_token, $n_pasta]);
    } else {
        $connGeral->prepare("INSERT INTO backup_automatizado (id, nuvem_status, nuvem_provedor, nuvem_token, nuvem_pasta) VALUES (1, ?, ?, ?, ?)")->execute([$n_status, $n_prov, $n_token, $n_pasta]);
    }
    $_SESSION['temp_msg'] = "Integração com o Telegram salva com sucesso!"; 
    $_SESSION['temp_msg_tipo'] = "success";
    header("Location: gerenciar_backups.php");
    exit;
}

// Exclusão Individual
if (isset($_GET['del'])) {
    $id_del = (int)$_GET['del'];
    $file = $connGeral->prepare("SELECT local FROM arquivo_backup WHERE id=?");
    $file->execute([$id_del]);
    $f = $file->fetch();
    if ($f) {
        $caminho = __DIR__ . "/backups/" . $f['local'];
        if (file_exists($caminho)) { @unlink($caminho); }
        $connGeral->prepare("DELETE FROM arquivo_backup WHERE id=?")->execute([$id_del]);
        $_SESSION['temp_msg'] = "Backup excluído com sucesso."; 
        $_SESSION['temp_msg_tipo'] = "warning";
    }
    header("Location: gerenciar_backups.php");
    exit;
}

// Exclusão em Massa
if (isset($_POST['excluir_massa']) && !empty($_POST['ids_massa'])) {
    $apagados = 0;
    foreach ($_POST['ids_massa'] as $id_del) {
        $id_del = (int)$id_del;
        $file = $connGeral->prepare("SELECT local FROM arquivo_backup WHERE id=?");
        $file->execute([$id_del]);
        $f = $file->fetch();
        if ($f) {
            $caminho = __DIR__ . "/backups/" . $f['local'];
            if (file_exists($caminho)) { @unlink($caminho); }
            $connGeral->prepare("DELETE FROM arquivo_backup WHERE id=?")->execute([$id_del]);
            $apagados++;
        }
    }
    $_SESSION['temp_msg'] = "$apagados backup(s) excluído(s) com sucesso."; 
    $_SESSION['temp_msg_tipo'] = "warning";
    header("Location: gerenciar_backups.php");
    exit;
}

// Resgatar mensagens salvas na sessão (pós-refresh da página)
if (isset($_SESSION['temp_msg'])) {
    $msg = $_SESSION['temp_msg']; 
    $msg_tipo = $_SESSION['temp_msg_tipo'];
    unset($_SESSION['temp_msg']); 
    unset($_SESSION['temp_msg_tipo']);
}

// --- 2.5 SINCRONIZAR ARQUIVOS FÍSICOS COM O BANCO DE DADOS (AUTO-CORREÇÃO) ---
try {
    $dir_bkp_sync = __DIR__ . '/backups';
    if (!is_dir($dir_bkp_sync)) { @mkdir($dir_bkp_sync, 0777, true); }
    if (is_dir($dir_bkp_sync)) {
        $arquivos = scandir($dir_bkp_sync);
        foreach ($arquivos as $arq_nome) {
            // Ignora pastas superiores e arquivos index do sistema
            if ($arq_nome === '.' || $arq_nome === '..' || $arq_nome === 'index.php' || $arq_nome === 'index.html' || $arq_nome === '.htaccess') continue;
            
            $arq_caminho = $dir_bkp_sync . '/' . $arq_nome;
            
            if (is_file($arq_caminho)) {
                $check_sync = $connGeral->prepare("SELECT id FROM arquivo_backup WHERE local = ?");
                $check_sync->execute([$arq_nome]);
                // Se o arquivo existir na pasta do servidor, mas não no banco, ele cadastra sozinho!
                if ($check_sync->rowCount() == 0) {
                    $tamanho_mb = number_format(filesize($arq_caminho) / 1048576, 2) . ' MB';
                    $data_arq = date("Y-m-d H:i:s", filemtime($arq_caminho));
                    $connGeral->prepare("INSERT INTO arquivo_backup (local, data, tipo, size) VALUES (?, ?, 'Manual', ?)")->execute([$arq_nome, $data_arq, $tamanho_mb]);
                }
            }
        }
        
        // Remove do banco de dados qualquer arquivo que o usuário tenha apagado direto pelo cPanel (Limpeza de Órfãos)
        $db_bks_sync = $connGeral->query("SELECT id, local FROM arquivo_backup")->fetchAll(PDO::FETCH_ASSOC);
        foreach ($db_bks_sync as $bk) {
            if (!file_exists($dir_bkp_sync . '/' . $bk['local'])) {
                $connGeral->prepare("DELETE FROM arquivo_backup WHERE id=?")->execute([$bk['id']]);
            }
        }
    }
} catch(Exception $e) { }
// ----------------------------------------------------------------------------


// --- 3. BUSCAR LISTAGEM ---
$backups = $connGeral->query("SELECT * FROM arquivo_backup ORDER BY id DESC")->fetchAll(PDO::FETCH_ASSOC);
$config_auto = $connGeral->query("SELECT * FROM backup_automatizado WHERE id=1")->fetch(PDO::FETCH_ASSOC);
if (!$config_auto) $config_auto = ['status'=>'inativo', 'tempo'=>'diario', 'horario'=>'03:00', 'nuvem_status'=>'inativo', 'nuvem_provedor'=>'telegram', 'nuvem_token'=>'', 'nuvem_pasta'=>''];
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>

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

    <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Backups | <?= 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">
    <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; overflow-x: hidden; margin: 0; }
        
        .sidebar { width: 260px; height: 100vh; position: fixed; background: var(--bg-card); border-right: 1px solid #333; z-index: 1050; padding: 20px; overflow-y: auto; transition: 0.3s; }
        .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; }
        
        .main-content { margin-left: 260px; 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); }
        .header-title { font-size: 1.3rem; font-weight: 800; color: #fff; text-transform: uppercase; letter-spacing: 1px; }

        .card-custom { background: var(--bg-card); border: 1px solid var(--border-color); border-radius: 12px; }
        .form-control, .form-select { background: #151521 !important; border: 1px solid #444 !important; color: #fff !important; }
        .table-dark { --bs-table-bg: transparent; }

        /* Estilização da Área do Telegram */
        .card-nuvem-container { background: #141b2d; border-radius: 15px; overflow: hidden; box-shadow: 0 10px 30px rgba(0,0,0,0.4); border: 1px solid #1f2937; margin-bottom: 25px; }
        .nuvem-header { background: linear-gradient(135deg, #0088cc 0%, #00aaff 100%); padding: 25px 20px; color: white; }
        .nuvem-body { padding: 20px; }

        @media (max-width: 992px) {
            .sidebar { transform: translateX(-100%); }
            .sidebar.show { transform: translateX(0); }
            .main-content { margin-left: 0; }
            .mobile-toggle { display: block !important; margin-right: 15px; }
        }
        .mobile-toggle { display: none; color: #fff; font-size: 1.5rem; background: none; border: none; }
        .overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,0.5); z-index: 1040; }
        .overlay.show { display: block; }
    </style>
</head>
<body>
<?php include 'menu.php'; ?>


<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">Gestão de Backups</div>
        </div>
        <div class="header-icons">
            <a href="sair.php" class="btn btn-danger btn-sm rounded-pill px-3 shadow-sm"><i class="fas fa-power-off"></i></a>
        </div>
    </div>

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

        <div class="row">
            <div class="col-12">
                <div class="card-nuvem-container">
                    <div class="nuvem-header">
                        <div class="d-flex align-items-center justify-content-between">
                            <div>
                                <h3 class="fw-bold mb-1"><i class="fab fa-telegram-plane me-2"></i> Configurar Envio Telegram</h3>
                                <p class="mb-0 text-white-50">Receba seus backups direto no seu celular de forma ilimitada e gratuita.</p>
                            </div>
                        </div>
                    </div>
                    
                    <div class="nuvem-body">
                        <form method="POST">
                            <div class="p-4 rounded" style="background: rgba(0,0,0,0.15); border: 1px solid rgba(255,255,255,0.05);">
                                
                                <div class="form-check form-switch mb-4">
                                    <input class="form-check-input fs-4" type="checkbox" name="nuvem_status" id="chkNuvem" <?= ($config_auto['nuvem_status']=='ativo')?'checked':'' ?>>
                                    <label class="form-check-label text-white fw-bold ms-2 mt-1" for="chkNuvem">Ativar Envio para o Telegram após os Backups</label>
                                </div>

                                <div class="row g-3">
                                    <div class="col-md-6">
                                        <label class="small text-white-50 fw-bold mb-1">Seu ID do Chat (IDBot)</label>
                                        <input type="text" name="nuvem_pasta" class="form-control bg-dark border-secondary text-white py-2" value="<?= htmlspecialchars($config_auto['nuvem_pasta'] ?? '') ?>" placeholder="Ex: 8641957162">
                                    </div>
                                    <div class="col-md-6">
                                        <label class="small text-white-50 fw-bold mb-1">Token do Robô (BotFather)</label>
                                        <input type="password" name="nuvem_token" class="form-control bg-dark border-secondary text-white py-2" value="<?= htmlspecialchars($config_auto['nuvem_token'] ?? '') ?>" placeholder="Ex: 8332877212:AAHNcAmgJBViOs9...">
                                    </div>
                                </div>
                                
                                <div class="mt-4 d-flex flex-wrap gap-3">
                                    <button type="submit" name="salvar_nuvem" class="btn fw-bold px-4 py-2 shadow text-white" style="background-color: #0088cc;">
                                        <i class="fas fa-save me-2"></i> Salvar Integração do Telegram
                                    </button>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>

        <div class="row g-4 mb-4">
            <div class="col-md-6">
                <div class="card card-custom h-100 border-top border-3 p-4 shadow-lg" style="border-color: #0088cc !important;">
                    <h5 class="mb-3 fw-bold" style="color: #0088cc;"><i class="fas fa-bolt me-2"></i> Executar Agora</h5>
                    <p class="text-white-50 small">Clique no botão abaixo para gerar o backup completo de todos os bancos de dados agora mesmo e enviar direto para o seu Telegram configurado.</p>
                    <form method="POST" class="mt-auto">
                        <button type="submit" name="gerar_manual" class="btn text-white w-100 fw-bold py-3 shadow fs-6" style="background: linear-gradient(135deg, #0088cc 0%, #00aaff 100%);">
                            <i class="fab fa-telegram-plane me-2 fs-5"></i> GERAR E ENVIAR PARA O TELEGRAM
                        </button>
                    </form>
                </div>
            </div>

            <div class="col-md-6">
                <div class="card card-custom h-100 border-top border-3 border-warning p-4 shadow-lg">
                    <h5 class="mb-3 text-warning fw-bold"><i class="fas fa-clock me-2"></i> Rotina Automática (cPanel)</h5>
                    <form method="POST">
                        <div class="form-check form-switch mb-3">
                            <input class="form-check-input" type="checkbox" name="status" id="chkAuto" <?= ($config_auto['status']=='ativo')?'checked':'' ?>>
                            <label class="form-check-label text-white fw-bold" for="chkAuto">Ativar Geração Automática</label>
                        </div>
                        <div class="row g-2">
                            <div class="col-6">
                                <label class="small text-white-50 fw-bold">Frequência</label>
                                <select name="tempo" class="form-select">
                                    <option value="diario" <?= ($config_auto['tempo']=='diario')?'selected':'' ?>>1 Vez ao Dia</option>
                                    <option value="12h" <?= ($config_auto['tempo']=='12h')?'selected':'' ?>>2 Vezes ao Dia (12h)</option>
                                    <option value="6h" <?= ($config_auto['tempo']=='6h')?'selected':'' ?>>4 Vezes ao Dia (6h)</option>
                                    <option value="semanal" <?= ($config_auto['tempo']=='semanal')?'selected':'' ?>>Semanal</option>
                                </select>
                            </div>
                            <div class="col-6">
                                <label class="small text-white-50 fw-bold">Horário de Início</label>
                                <input type="time" name="horario" class="form-control" value="<?= htmlspecialchars($config_auto['horario']) ?>">
                            </div>
                        </div>
                        <button type="submit" name="salvar_auto" class="btn btn-outline-warning w-100 mt-3 fw-bold">
                            <i class="fas fa-save me-1"></i> SALVAR ROTINA
                        </button>
                    </form>
                </div>
            </div>
        </div>

        <div class="row">
            <div class="col-12">
                <div class="card card-custom shadow-lg">
                    <div class="p-3 border-bottom border-secondary d-flex justify-content-between align-items-center">
                        <h5 class="mb-0 text-white fw-bold"><i class="fas fa-history me-2 text-info"></i> Histórico de Arquivos Locais</h5>
                        
                        <button type="submit" form="formMassa" name="excluir_massa" class="btn btn-sm btn-danger fw-bold shadow" onclick="return confirm('Deseja realmente excluir todos os backups selecionados?')" id="btnDelMassa" style="display:none;">
                            <i class="fas fa-trash me-1"></i> EXCLUIR SELECIONADOS
                        </button>
                    </div>
                    
                    <div class="table-responsive">
                        <form id="formMassa" method="POST">
                            <table class="table table-dark table-hover align-middle mb-0">
                                <thead>
                                    <tr class="text-white-50 small text-uppercase">
                                        <th class="ps-4" style="width: 1%;">
                                            <input type="checkbox" id="checkAll" class="form-check-input bg-dark border-secondary" style="cursor:pointer;">
                                        </th>
                                        <th>Arquivo ZIP</th>
                                        <th>Data / Hora</th>
                                        <th>Tipo</th>
                                        <th>Tamanho</th>
                                        <th class="text-end pe-4">Ações</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <?php if(empty($backups)): ?>
                                        <tr><td colspan="6" class="text-center py-5 text-muted small">Nenhum backup registrado no servidor local.</td></tr>
                                    <?php else: ?>
                                        <?php foreach($backups as $b): ?>
                                        <tr>
                                            <td class="ps-4">
                                                <input type="checkbox" name="ids_massa[]" value="<?= $b['id'] ?>" class="form-check-input bg-dark border-secondary check-item" style="cursor:pointer;">
                                            </td>
                                            <td class="text-info fw-bold"><i class="fas fa-file-archive me-2"></i> <?= htmlspecialchars($b['local']) ?></td>
                                            <td class="small"><?= date('d/m/Y H:i', strtotime($b['data'])) ?></td>
                                            <td>
                                                <span class="badge rounded-pill <?= ($b['tipo']=='Manual')?'bg-primary':'bg-warning text-dark' ?>">
                                                    <?= htmlspecialchars($b['tipo']) ?>
                                                </span>
                                            </td>
                                            <td class="small opacity-75"><?= htmlspecialchars($b['size']) ?></td>
                                            <td class="text-end pe-4">
                                                <div class="btn-group">
                                                    <a href="backups/<?= htmlspecialchars($b['local']) ?>" download class="btn btn-sm btn-outline-success border-0" title="Baixar">
                                                        <i class="fas fa-download"></i>
                                                    </a>
                                                    <a href="?del=<?= $b['id'] ?>" class="btn btn-sm btn-outline-danger border-0" onclick="return confirm('Deseja excluir permanentemente este backup?')" title="Excluir">
                                                        <i class="fas fa-trash"></i>
                                                    </a>
                                                </div>
                                            </td>
                                        </tr>
                                        <?php endforeach; ?>
                                    <?php endif; ?>
                                </tbody>
                            </table>
                        </form>
                    </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() { 
        document.getElementById('sidebar').classList.toggle('show'); 
        document.getElementById('overlay').classList.toggle('show'); 
    }

    // --- Lógica Javascript para Exclusão em Massa ---
    const checkAll = document.getElementById('checkAll');
    const checkItems = document.querySelectorAll('.check-item');
    const btnDelMassa = document.getElementById('btnDelMassa');

    if(checkAll) {
        checkAll.addEventListener('change', function() {
            checkItems.forEach(item => item.checked = checkAll.checked);
            toggleBtn();
        });
    }

    checkItems.forEach(item => {
        item.addEventListener('change', toggleBtn);
    });

    function toggleBtn() {
        const checked = document.querySelectorAll('.check-item:checked').length;
        if(checked > 0) {
            btnDelMassa.style.display = 'inline-block';
        } else {
            btnDelMassa.style.display = 'none';
        }
    }
</script>
</body>
</html>