<?php
// --- CONFIGURAÇÃO DE VELOCIDADE E LIMITE MÁXIMO ---
ini_set('memory_limit', '-1'); 
set_time_limit(0); 
date_default_timezone_set('America/Sao_Paulo'); 

// Script de Automação de Cobrança Multi-Tenant - TOP IPTV
require_once 'config.php';
$pdo = getConexaoAtiva();
$pdo->exec("SET NAMES utf8mb4");

echo "====== INICIANDO AUTOMOÇÃO DE COBRANÇA (" . date('d/m/Y H:i:s') . ") ======\n";

// 1. Busca todos os admins/revendedores que configuraram as mensagens de cobrança
try {
    $admins = $pdo->query("SELECT * FROM config_cobranca")->fetchAll(PDO::FETCH_ASSOC);
} catch (Exception $e) {
    die("Erro: Tabela 'config_cobranca' não encontrada no banco de dados.\n");
}

if (empty($admins)) {
    die("Nenhuma configuração de cobrança ativa encontrada.\n");
}

$total_enviados = 0;

foreach ($admins as $config) {
    $admin_id = $config['admin_id'];
    
    // Puxa os dados da API de WhatsApp EXCLUSIVA do dono das contas (Admin ou Revendedor)
    try {
        $stmtApi = $pdo->prepare("SELECT wa_api_url, wa_api_key, wa_instancia, wa_status FROM reg_users WHERE id = ? LIMIT 1");
        $api_user = $stmtApi->execute([$admin_id]) ? $stmtApi->fetch(PDO::FETCH_ASSOC) : null;
        
        // Se o revendedor não tem API ativa ou configurada, pula ele pra não gerar erro de cURL
        if (!$api_user || (int)$api_user['wa_status'] == 0 || empty($api_user['wa_api_url'])) {
            echo "-> Revendedor ID #{$admin_id} pulado (API de WhatsApp inativa ou não configurada).\n";
            continue;
        }
        
        $wa_url  = rtrim($api_user['wa_api_url'], '/');
        $wa_key  = $api_user['wa_api_key'];
        $wa_inst = $api_user['wa_instancia'];
        
        // Formata o endpoint exato padrão da Evolution API
        if(strpos($wa_url, '/message/sendText') === false) { 
            $endpoint = $wa_url . "/message/sendText/" . $wa_inst; 
        } else {
            $endpoint = $wa_url;
        }
        
    } catch (Exception $e) {
        echo "-> Erro ao ler API do Revendedor ID #{$admin_id}: " . $e->getMessage() . "\n";
        continue;
    }

    // 2. Busca clientes desse revendedor específico que vencem em 4, 1 ou 0 dias
    // (Apenas clientes IPTV, ignorando testes de curta duração)
    $sql = "SELECT username, whatsapp, exp_date, nome_cliente, DATEDIFF(FROM_UNIXTIME(exp_date), CURDATE()) as dias 
            FROM users 
            WHERE member_id = ? 
            AND (is_p2p = 0 OR is_p2p IS NULL)
            AND whatsapp IS NOT NULL AND whatsapp != ''
            AND DATEDIFF(FROM_UNIXTIME(exp_date), CURDATE()) IN (0, 1, 4)";
            
    $stmtCli = $pdo->prepare($sql);
    $stmtCli->execute([$admin_id]);
    $clientes = $stmtCli->fetchAll(PDO::FETCH_ASSOC);

    echo "-> Revendedor ID #{$admin_id} processando. Encontrados " . count($clientes) . " clientes para cobrar hoje.\n";

    foreach ($clientes as $cli) {
        $msg_base = "";
        $data_venc = date('d/m/Y', $cli['exp_date']);
        $nome_exibir = !empty($cli['nome_cliente']) ? $cli['nome_cliente'] : $cli['username'];

        // Escolhe a mensagem correspondente com base nos dias restantes
        if ($cli['dias'] == 4) {
            $msg_base = $config['msg_4dias'] ?? '';
        } elseif ($cli['dias'] == 1) {
            $msg_base = $config['msg_1dia'] ?? '';
        } else {
            $msg_base = $config['msg_hoje'] ?? '';
        }

        // Se o texto da mensagem estiver vazio no painel do revendedor, ignora
        if (empty(trim($msg_base))) continue;

        // Substitui as tags dinâmicas pelos dados reais do cliente
        $msg_final = str_replace(
            ['{nome}', '{vencimento}', '{login}', '{usuario}'], 
            [$nome_exibir, $data_venc, $cli['username'], $cli['username']], 
            $msg_base
        );

        // Limpa e formata o número do WhatsApp do cliente
        $numero = preg_replace('/\D/', '', $cli['whatsapp']);
        if (empty($numero)) continue;
        if (strlen($numero) == 10 || strlen($numero) == 11) { $numero = "55" . $numero; }

        // Prepara o payload no formato cirúrgico da Evolution API V1/V2
        $payload_dados = [ 
            "number" => $numero, 
            "options" => [ "delay" => 1500, "presence" => "composing" ],
            "textMessage" => [ "text" => $msg_final ]
        ];

        // Executa o disparo HTTP POST via cURL em background para a API do revendedor
        $ch = curl_init($endpoint);
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true, 
            CURLOPT_POST => true, 
            CURLOPT_POSTFIELDS => json_encode($payload_dados),
            CURLOPT_HTTPHEADER => [
                "Content-Type: application/json", 
                "apikey: " . $wa_key,
                "Authorization: Bearer " . $wa_key
            ], 
            CURLOPT_TIMEOUT => 10,
            CURLOPT_SSL_VERIFYPEER => false, // Impede bloqueios de segurança por SSL da VPS
            CURLOPT_SSL_VERIFYHOST => false
        ]);
        
        $resposta = curl_exec($ch); 
        curl_close($ch);
        
        $total_enviados++;
        echo "   [✓] Cobrança enviada para: {$nome_exibir} ({$numero}) - Vence em {$cli['dias']} dias.\n";
    }
}

echo "====== PROCESSAMENTO FINALIZADO EM " . date('d/m/Y H:i:s') . " - Total de envios: {$total_enviados} ======\n";
?>