<?php
// cron_cobrancas_rev.php
chdir(__DIR__);
require_once 'conexao.php';
date_default_timezone_set('America/Sao_Paulo');

// FORÇAR UTF-8 PARA NÃO ENVIAR "??" NOS EMOJIS NO WHATSAPP
try { 
    $connGeral->exec("SET NAMES utf8mb4"); 
    $connUser->exec("SET NAMES utf8mb4"); 
} catch (Exception $e) { }

echo "--- INICIANDO PROCESSAMENTO DE COBRANCAS DE REVENDEDORES ---\n";

$forcar_teste = isset($_GET['forcar']) && $_GET['forcar'] == 'sim';

try {
    // Busca o mapa de perfis (para saber se o cliente é Net ou Claro)
    $mapa_perfis = [];
    $res_p = $connGeral->query("SELECT id, nome FROM perfil")->fetchAll(PDO::FETCH_ASSOC);
    foreach($res_p as $p) { $mapa_perfis[$p['id']] = mb_strtolower($p['nome']); }

    $confMsgRev = $connGeral->query("SELECT * FROM config_msg_rev WHERE id=1")->fetch(PDO::FETCH_ASSOC);
    
    if (!$forcar_teste && isset($confMsgRev['cron_status']) && $confMsgRev['cron_status'] !== 'ativo') {
        die("Automacao desativada no painel.\n");
    }

    $hoje_brasil = date('Y-m-d');
    $hora_agora = date('H:i');
    $hora_agendada = isset($confMsgRev['cron_hora']) ? $confMsgRev['cron_hora'] : '10:00';
    
    echo "-> Relogio do Servidor: $hora_agora | Horario Agendado: $hora_agendada\n";
    
    // Trava do Dia
    if (!$forcar_teste && isset($confMsgRev['ultima_execucao']) && $confMsgRev['ultima_execucao'] === $hoje_brasil) {
        die("-> As cobrancas de hoje ($hoje_brasil) ja foram enviadas com sucesso.\n");
    }

    // Trava da Hora
    if (!$forcar_teste && $hora_agora != $hora_agendada) {
        die("-> Aguardando o momento exato do disparo...\n");
    }

    $template_cobranca = !empty($confMsgRev['msg_cobranca']) ? $confMsgRev['msg_cobranca'] : "🚨 *Aviso de Vencimento!* 🚨\n\nOlá {nome}, o seu painel de revenda vence em *{dias} dias*!\n\nVocê tem {qtd_ativos} clientes ativos.\nFatura total: *{total_pagar}*";

    try { $connUser->query("SELECT whatsapp FROM rev LIMIT 1"); } catch (Exception $e) { $connUser->exec("ALTER TABLE rev ADD COLUMN whatsapp VARCHAR(20) DEFAULT NULL"); }

    // CORREÇÃO: Agora puxa os valores de Claro e Net para poder somar
    $stmt = $connUser->query("SELECT id, nome, usuario, LimiteUser, data_premio, whatsapp, CadUser, valor_claro, valor_net FROM rev WHERE bloqueado != 'sim' OR bloqueado IS NULL");
    $revendedores = $stmt->fetchAll(PDO::FETCH_ASSOC);

    $hoje = new DateTime();
    $hoje->setTime(0, 0, 0); 
    $contagem_avisos = 0;
    
    $dominio = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'painelcs4.tvbr.top';
    $link_painel_corrigido = "https://" . $dominio;

    foreach ($revendedores as $r) {
        $whats = trim($r['whatsapp'] ?? '');
        if (empty($whats)) continue;

        $venc_ts = (int)$r['data_premio'];
        if ($venc_ts <= 0) continue; 
        
        $data_vencimento = new DateTime();
        $data_vencimento->setTimestamp($venc_ts);
        $data_vencimento->setTime(0, 0, 0); 
        
        $intervalo = $hoje->diff($data_vencimento);
        $dias_para_vencer = (int)$intervalo->format("%r%a");

        if (in_array($dias_para_vencer, [3, 2, 1, 0])) {
            
            // =========================================================
            // MÁGICA DA CALCULADORA DO REVENDEDOR
            // =========================================================
            $agora = time();
            $sql_conta = "SELECT perfil FROM usuario WHERE CadUser = ? AND bloqueado != 'sim' AND IF(data_premio REGEXP '^[0-9]+$', CAST(data_premio AS UNSIGNED), UNIX_TIMESTAMP(STR_TO_DATE(data_premio, '%Y-%m-%d'))) > ?";
            $stmt_conta = $connUser->prepare($sql_conta);
            $stmt_conta->execute([$r['usuario'], $agora]);
            $cli_ativos = $stmt_conta->fetchAll(PDO::FETCH_ASSOC);
            
            $qtd_ativos_calc = count($cli_ativos);
            $total_fatura = 0;
            
            foreach($cli_ativos as $cli) {
                $p_nome = $mapa_perfis[$cli['perfil']] ?? '';
                if (strpos($p_nome, 'net') !== false) {
                    $total_fatura += (float)$r['valor_net'];
                } else {
                    $total_fatura += (float)$r['valor_claro']; // Padrão será valor claro
                }
            }
            $total_fmt = "R$ " . number_format($total_fatura, 2, ',', '.');
            // =========================================================

            $mensagem = str_replace(
                ['{nome}', '{usuario}', '{dias}', '{limite}', '{vencimento}', '{link_painel}', '{total_pagar}', '{qtd_ativos}'], 
                [(!empty($r['nome']) ? $r['nome'] : $r['usuario']), $r['usuario'], $dias_para_vencer, $r['LimiteUser'], date('d/m/Y', $venc_ts), $link_painel_corrigido, $total_fmt, $qtd_ativos_calc], 
                $template_cobranca
            );

            if ($dias_para_vencer == 0) {
                $mensagem = str_replace(["em *0 dias*", "em 0 dias"], ["*HOJE*", "HOJE"], $mensagem);
            }

            $stmtWpp = $connGeral->prepare("SELECT api_url, api_key, instancia FROM config_api_whatsapp WHERE usuario = ? LIMIT 1");
            $stmtWpp->execute([$r['CadUser']]);
            $confZapAdmin = $stmtWpp->fetch(PDO::FETCH_ASSOC);

            if ($confZapAdmin && !empty($confZapAdmin['api_url']) && !empty($confZapAdmin['instancia'])) {
                $numero_cliente = preg_replace('/[^0-9]/', '', $whats);
                if (strlen($numero_cliente) == 10 || strlen($numero_cliente) == 11) { $numero_cliente = "55" . $numero_cliente; }

                $curl = curl_init();
                curl_setopt_array($curl, [
                  CURLOPT_URL => rtrim($confZapAdmin['api_url'], '/') . "/message/sendText/" . trim($confZapAdmin['instancia']),
                  CURLOPT_RETURNTRANSFER => true,
                  CURLOPT_CUSTOMREQUEST => 'POST',
                  CURLOPT_SSL_VERIFYPEER => false,
                  CURLOPT_SSL_VERIFYHOST => false,
                  CURLOPT_POSTFIELDS => json_encode(["number" => $numero_cliente, "textMessage" => ["text" => $mensagem]]),
                  CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'apikey: ' . trim($confZapAdmin['api_key'])],
                ]);
                curl_exec($curl); curl_close($curl);
                
                echo "✅ Aviso ENVIADO para: {$r['usuario']} (Fatura: $total_fmt)\n";
                $contagem_avisos++;
                
                if (!$forcar_teste) { sleep(rand(5, 10)); } // Anti-ban 
            }
        }
    }
    
    // Atualiza a trava no banco para não mandar mais hoje
    if (!$forcar_teste && $contagem_avisos > 0) {
        $connGeral->query("UPDATE config_msg_rev SET ultima_execucao = '{$hoje_brasil}' WHERE id=1");
    }
    
    echo "--- FIM: $contagem_avisos revendedores avisados ---\n";
} catch (Exception $e) { echo "ERRO: " . $e->getMessage(); }
?>
