<?php
// ARQUIVO: instalador_completo.php
// FUNÇÃO: Repara todo o banco de dados, adicionando colunas e tabelas que faltam após importar backup antigo.

require_once 'conexao.php';
@set_time_limit(0);

// Força a remoção do modo estrito em todas as conexões logo no início
try { $connUser->exec("SET sql_mode=''"); } catch(Exception $e){}
try { $connGeral->exec("SET sql_mode=''"); } catch(Exception $e){}
try { $connAcessos->exec("SET sql_mode=''"); } catch(Exception $e){}

// --- FUNÇÕES DE AJUDA ---
function checkCol($conn, $tab, $col, $def) {
    try {
        // Tenta selecionar a coluna. Se falhar, ela não existe.
        $conn->query("SELECT $col FROM $tab LIMIT 1");
    } catch (Exception $e) {
        try {
            $conn->exec("SET sql_mode=''");
            $conn->exec("ALTER TABLE $tab ADD COLUMN $col $def");
            echo "<div class='ok'>+ Coluna <b>$col</b> criada na tabela <b>$tab</b>.</div>";
        } catch (Exception $e2) { echo "<div class='erro'>Erro ao criar coluna $col: ".$e2->getMessage()."</div>"; }
    }
}

function checkTable($conn, $nome, $sql) {
    try {
        $conn->exec("SET sql_mode=''");
        $conn->exec($sql);
        echo "<div class='ok'>✔ Tabela <b>$nome</b> verificada.</div>";
    } catch (Exception $e) {
        echo "<div class='erro'>Erro na tabela $nome: " . $e->getMessage() . "</div>";
    }
}
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Reparador Geral V3.0</title>
    <style>
        body { background: #151521; color: #fff; font-family: monospace; padding: 20px; }
        .box { background: #1e1e2d; padding: 20px; border-radius: 10px; border: 1px solid #333; margin-bottom: 20px; }
        h2 { border-bottom: 1px solid #444; padding-bottom: 10px; color: #7367f0; }
        .ok { color: #28c76f; margin: 5px 0; border-left: 3px solid #28c76f; padding-left: 10px; }
        .erro { color: #ea5455; margin: 5px 0; border-left: 3px solid #ea5455; padding-left: 10px; }
    </style>
</head>
<body>

<div class="box">
    <h2>1. BANCO DE DADOS USER (Clientes e Revendas)</h2>
    <p>Corrigindo erros de "Column not found" e tabelas de pagamento...</p>
    <?php
    // --- VACINA MESTRE: Corrige a trava da data antiga do cPanel para liberar a tabela usuario ---
    try {
        $connUser->exec("ALTER TABLE usuario MODIFY data_cadastro TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL");
        echo "<div class='ok'>⚙ Tabela <b>usuario</b> destravada (data_cadastro corrigida).</div>";
    } catch (Exception $e) {
        try {
            $connUser->exec("ALTER TABLE usuario MODIFY data_cadastro DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL");
            echo "<div class='ok'>⚙ Tabela <b>usuario</b> destravada (data_cadastro corrigida).</div>";
        } catch (Exception $ex) {}
    }

    // Agora o MySQL vai deixar criar as colunas sem dar o erro 1067!
    checkCol($connUser, 'usuario', 'id_perfil', "INT(11) DEFAULT 1"); 
    checkCol($connUser, 'usuario', 'dono', "VARCHAR(100) DEFAULT NULL"); 
    checkCol($connUser, 'usuario', 'limite', "INT(11) DEFAULT 0"); 
    checkCol($connUser, 'usuario', 'mac', "VARCHAR(100) DEFAULT NULL");
    checkCol($connUser, 'usuario', 'bloqueado', "VARCHAR(10) DEFAULT 'nao'");
    checkCol($connUser, 'usuario', 'ValorCobrado', "VARCHAR(50) DEFAULT NULL");
    checkCol($connUser, 'usuario', 'vencimento_email_enviado', "INT(1) DEFAULT 0");
    checkCol($connUser, 'usuario', 'notas', "TEXT DEFAULT NULL");
    checkCol($connUser, 'usuario', 'email', "VARCHAR(255) DEFAULT NULL");
    checkCol($connUser, 'usuario', 'whatsapp', "VARCHAR(20) DEFAULT NULL"); // Adicionado V3
    
    // --- 1.2 TABELA DE CONFIGURAÇÃO DE GATEWAYS (MERCADO PAGO E ASAAS) ---
    $sql_mp_rev = "CREATE TABLE IF NOT EXISTS mp_revendedores (
        id INT AUTO_INCREMENT PRIMARY KEY,
        usuario_revendedor VARCHAR(255) NOT NULL,
        access_token TEXT DEFAULT NULL,
        access_token_asaas TEXT DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connUser, 'mp_revendedores', $sql_mp_rev);

    // --- 1.3 TABELA DE LOG DE FATURAS GERADAS (HISTÓRICO PIX) ---
    $sql_pagamentos_sistema = "CREATE TABLE IF NOT EXISTS pagamentos (
        id INT AUTO_INCREMENT PRIMARY KEY,
        id_pagamento_mp VARCHAR(255) NOT NULL,
        usuario_id VARCHAR(255) NOT NULL,
        status VARCHAR(50) DEFAULT 'pending',
        valor DECIMAL(10,2) NOT NULL,
        data_criacao TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connUser, 'pagamentos', $sql_pagamentos_sistema);

    // --- 1.4 GARANTIA DE COLUNAS DE CUSTO E WHATSAPP NA TABELA DE REVENDA ---
    checkCol($connUser, 'rev', 'valor_claro', "DECIMAL(10,2) DEFAULT 0.00");
    checkCol($connUser, 'rev', 'valor_net', "DECIMAL(10,2) DEFAULT 0.00");
    checkCol($connUser, 'rev', 'nome', "VARCHAR(255) DEFAULT ''");
    checkCol($connUser, 'rev', 'whatsapp', "VARCHAR(20) DEFAULT NULL");

    // --- 1.5 TABELA DE PAGAMENTOS ---
    $sql_pag = "CREATE TABLE IF NOT EXISTS configuracoes_pagamento (
        id INT AUTO_INCREMENT PRIMARY KEY,
        access_token VARCHAR(255),
        public_key VARCHAR(255),
        client_id VARCHAR(255),
        client_secret VARCHAR(255),
        valor_padrao DECIMAL(10,2) DEFAULT 30.00,
        tipo VARCHAR(50) DEFAULT 'mercadopago'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connUser, 'configuracoes_pagamento', $sql_pag);

    // --- 1.6 TABELA REV_PERFIL (Custo) ---
    $sql_rev = "CREATE TABLE IF NOT EXISTS rev_perfil (
        id INT AUTO_INCREMENT PRIMARY KEY,
        id_rev INT,
        id_perfil INT,
        valor_custo DECIMAL(10,2) DEFAULT 0.00
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connUser, 'rev_perfil', $sql_rev);
    
    // --- 1.7 TABELA TESTE ---
    checkCol($connUser, 'teste', 'email', "VARCHAR(255) DEFAULT NULL");
    checkCol($connUser, 'teste', 'celular', "VARCHAR(50) DEFAULT NULL");
    checkCol($connUser, 'teste', 'whatsapp', "VARCHAR(20) DEFAULT NULL"); // Adicionado V3
    ?>
</div>

<div class="box">
    <h2>2. BANCO DE DADOS GERAL (Configurações)</h2>
    <p>Garantindo tabelas de Servidor, DNS e Backup...</p>
    <?php
    // --- 2.0 TABELA DO WHATSAPP ---
    $sql_zap_api = "CREATE TABLE IF NOT EXISTS config_api_whatsapp (
        id INT AUTO_INCREMENT PRIMARY KEY,
        usuario VARCHAR(100) NOT NULL,
        api_url VARCHAR(255) DEFAULT NULL,
        api_key VARCHAR(255) DEFAULT NULL,
        instancia VARCHAR(100) DEFAULT NULL,
        status VARCHAR(20) DEFAULT 'desconectado'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'config_api_whatsapp', $sql_zap_api);
    
    // Colunas de textos para API (Adicionado V3)
    checkCol($connGeral, 'config_api_whatsapp', 'msg_novo', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_api_whatsapp', 'msg_cobranca', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_api_whatsapp', 'msg_vencimento', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_api_whatsapp', 'msg_renovacao', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_api_whatsapp', 'msg_teste', "TEXT DEFAULT NULL");

    // --- 2.1 TABELA MESTRE DE MODELOS DE WHATSAPP E CRON ---
    $sql_config_msg_rev = "CREATE TABLE IF NOT EXISTS config_msg_rev (
        id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
        msg_novo TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
        msg_cobranca TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
        cron_hora VARCHAR(5) DEFAULT '10:00',
        cron_status VARCHAR(10) DEFAULT 'ativo',
        cpf_admin VARCHAR(20) DEFAULT '',
        ultima_execucao DATE DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;";
    checkTable($connGeral, 'config_msg_rev', $sql_config_msg_rev);
    
    checkCol($connGeral, 'config_msg_rev', 'cpf_admin', "VARCHAR(20) DEFAULT ''");
    
    // Colunas de textos para Cron Revenda (Adicionado V3)
    checkCol($connGeral, 'config_msg_rev', 'msg_novo', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_msg_rev', 'msg_cobranca', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_msg_rev', 'msg_vencimento', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_msg_rev', 'msg_renovacao', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'config_msg_rev', 'msg_teste', "TEXT DEFAULT NULL");

    $connGeral->exec("INSERT IGNORE INTO config_msg_rev (id, msg_novo, msg_cobranca, cron_hora, cron_status) VALUES (1, '*🎉 BOAS VINDAS AO NOSSO SERVIDOR! 🎉*\\n\\n*🚀 ACESSO REVENDA*\\n\\n👤 *User:* {usuario}\\n🔑 *Senha:* {senha}\\n🔗 *Painel:* {link_painel}\\n📅 *Venc:* {vencimento}\\n\\n_Guarde esses dados com segurança!_', '🚨 *Aviso de Vencimento!* 🚨\\n\\nOlá {nome}, o seu painel de revenda vence em *{dias} dias*!\\n\\nVocê tem {qtd_ativos} clientes e a sua fatura gerada é de *{total_pagar}*\\n\\nPague sua fatura clicando no link abaixo:\\n{link_painel}/servidor/fatura.php?u={usuario}\\n\\nRenove com antecedência para evitar bloqueios.', '10:00', 'ativo')");

    // --- 2.2 TABELA SERVIDOR ---
    $sql_serv = "CREATE TABLE IF NOT EXISTS servidor (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nome VARCHAR(100),
        url VARCHAR(255),
        porta VARCHAR(10),
        usuario VARCHAR(100),
        senha VARCHAR(100),
        tipo VARCHAR(50) DEFAULT 'csp',
        ip VARCHAR(50)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'servidor', $sql_serv);
    checkCol($connGeral, 'servidor', 'tipo', "VARCHAR(50) DEFAULT 'csp'");

    // --- 2.3 TABELA PERFIL ---
    $sql_perf = "CREATE TABLE IF NOT EXISTS perfil (
        id INT AUTO_INCREMENT PRIMARY KEY,
        nome VARCHAR(100),
        url VARCHAR(255),
        porta VARCHAR(10),
        tipo VARCHAR(50)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'perfil', $sql_perf);

    // --- 2.4 TABELA BACKUPS ---
    $sql_bkp = "CREATE TABLE IF NOT EXISTS arquivo_backup (
        id INT AUTO_INCREMENT PRIMARY KEY,
        tipo VARCHAR(50) DEFAULT 'Manual',
        local VARCHAR(255) NOT NULL,
        data DATETIME DEFAULT CURRENT_TIMESTAMP,
        size VARCHAR(50) DEFAULT '0 KB',
        link_externo VARCHAR(255) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'arquivo_backup', $sql_bkp);
    checkCol($connGeral, 'arquivo_backup', 'link_externo', "VARCHAR(255) DEFAULT NULL");

    // --- 2.5 TABELA AUTOMACAO BACKUP E NUVEM TELEGRAM ---
    $sql_auto = "CREATE TABLE IF NOT EXISTS backup_automatizado (
        id INT NOT NULL PRIMARY KEY,
        status VARCHAR(20) DEFAULT 'inativo',
        tempo VARCHAR(20) DEFAULT 'diario',
        horario VARCHAR(10) DEFAULT '03:00'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'backup_automatizado', $sql_auto);
    
    // Colunas do Telegram (Adicionado V3)
    checkCol($connGeral, 'backup_automatizado', 'nuvem_status', "VARCHAR(20) DEFAULT 'inativo'");
    checkCol($connGeral, 'backup_automatizado', 'nuvem_provedor', "VARCHAR(50) DEFAULT 'telegram'");
    checkCol($connGeral, 'backup_automatizado', 'nuvem_token', "TEXT DEFAULT NULL");
    checkCol($connGeral, 'backup_automatizado', 'nuvem_pasta', "VARCHAR(100) DEFAULT ''");
    
    $connGeral->exec("INSERT IGNORE INTO backup_automatizado (id) VALUES (1)");

    // --- 2.6 TABELA SMTP e DNS ---
    $sql_smtp = "CREATE TABLE IF NOT EXISTS smtp_config (id INT AUTO_INCREMENT PRIMARY KEY, host VARCHAR(255), email VARCHAR(255), senha VARCHAR(255), porta VARCHAR(10), seguranca VARCHAR(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'smtp_config', $sql_smtp);
    
    $sql_dns = "CREATE TABLE IF NOT EXISTS mascaraurl (id INT AUTO_INCREMENT PRIMARY KEY, nome VARCHAR(100), url VARCHAR(255), porta VARCHAR(10)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connGeral, 'mascaraurl', $sql_dns);
    ?>
</div>

<div class="box">
    <h2>3. BANCO DE DADOS ACESSOS (Logs)</h2>
    <?php
    $sql_logs = "CREATE TABLE IF NOT EXISTS logs (id INT AUTO_INCREMENT PRIMARY KEY, mensagem TEXT, data DATETIME DEFAULT CURRENT_TIMESTAMP, ip VARCHAR(50), usuario VARCHAR(100)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connAcessos, 'logs', $sql_logs);
    
    $sql_acesso = "CREATE TABLE IF NOT EXISTS acessos (id INT AUTO_INCREMENT PRIMARY KEY, usuario VARCHAR(100), ip VARCHAR(50), data DATETIME DEFAULT CURRENT_TIMESTAMP, status VARCHAR(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connAcessos, 'acessos', $sql_acesso);

    // --- 3.1 TABELA DE RELATÓRIOS E LOGS DE DISPARO DO WHATSAPP ---
    $sql_log_disparos = "CREATE TABLE IF NOT EXISTS log_disparos (
        id INT AUTO_INCREMENT PRIMARY KEY,
        origem VARCHAR(255) NOT NULL,
        resumo VARCHAR(255) NOT NULL,
        status VARCHAR(50) NOT NULL,
        data_log TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;";
    checkTable($connAcessos, 'log_disparos', $sql_log_disparos);
    ?>
</div>

<div class="box">
    <h2>4. CORREÇÃO DE DATAS (1969)</h2>
    <p>Tentando corrigir datas zeradas vindas do backup...</p>
    <?php
    $stmt = $connUser->query("SELECT id, data_premio FROM usuario");
    $count = 0;
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $d = $row['data_premio'];
        if(empty($d) || $d == '0' || $d == '0000-00-00' || (is_numeric($d) && $d < 0)) {
            $hoje = date('Y-m-d');
            $connUser->query("UPDATE usuario SET data_premio = '$hoje' WHERE id = {$row['id']}");
            $count++;
        }
        elseif(is_numeric($d) && $d > 100000) {
            $nova = date('Y-m-d', $d);
            $connUser->query("UPDATE usuario SET data_premio = '$nova' WHERE id = {$row['id']}");
            $count++;
        }
    }
    echo "<div class='ok'><b>$count</b> datas corrigidas para o formato atual.</div>";
    ?>
</div>

<div style="text-align:center; margin-top:30px;">
    <h1 style="color:#28c76f">✅ CONCLUÍDO!</h1>
    <p>Todas as tabelas e colunas necessárias para o painel V3 estão instaladas.</p>
    <a href="index.php" style="background:#7367f0; color:white; padding:15px 30px; text-decoration:none; border-radius:8px; font-weight:bold;">VOLTAR AO PAINEL</a>
</div>

</body>
</html>
