<?php
// webhook.php - Robô que aprova Mercado Pago e Asaas simultaneamente
require_once 'conexao.php';
date_default_timezone_set('America/Sao_Paulo');

// 1. Recebe os dados ocultos
$input = file_get_contents('php://input');
$data = json_decode($input, true);

$payment_id = null;
$gateway = '';

// Verifica de quem veio o aviso (MP ou Asaas)
if (isset($_GET['topic']) && $_GET['topic'] == 'payment') {
    $payment_id = $_GET['id'];
    $gateway = 'mp';
} elseif (isset($data['action']) && strpos($data['action'], 'payment') !== false && isset($data['data']['id'])) {
    $payment_id = $data['data']['id'];
    $gateway = 'mp';
} elseif (isset($data['event']) && in_array($data['event'], ['PAYMENT_RECEIVED', 'PAYMENT_CONFIRMED']) && isset($data['payment']['id'])) {
    $payment_id = $data['payment']['id'];
    $gateway = 'asaas';
}

// CORREÇÃO 1: Retorna 200 OK para o Asaas parar de bloquear, mesmo ignorando o evento.
if (!$payment_id) { 
    http_response_code(200); 
    die("Ignorado: Evento nao e de pagamento confirmado."); 
}

// 2. Busca o pagamento na nossa tabela
$stmtPag = $connUser->prepare("SELECT * FROM pagamentos WHERE id_pagamento_mp = ? LIMIT 1");
$stmtPag->execute([$payment_id]);
$pagamento = $stmtPag->fetch(PDO::FETCH_ASSOC);

// CORREÇÃO 2: Retorna 200 OK se não achar no banco, para evitar que o Asaas puna o servidor.
if (!$pagamento) { 
    http_response_code(200); 
    die("Ignorado: Pagamento nao registrado no nosso banco."); 
}

if ($pagamento['status'] === 'approved') { 
    http_response_code(200); 
    die("Pagamento ja processado anteriormente."); 
}

$usuario_rev = $pagamento['usuario_id'];

// 3. Acha o Revendedor e o Dono
$stmtRev = $connUser->prepare("SELECT * FROM rev WHERE usuario = ? LIMIT 1");
$stmtRev->execute([$usuario_rev]);
$revendedor = $stmtRev->fetch(PDO::FETCH_ASSOC);

if (!$revendedor) { 
    http_response_code(200); 
    die("Ignorado: Revendedor nao existe mais."); 
}
$dono = $revendedor['CadUser'];

// 4. Puxa as Chaves do Dono
$stmtConfig = $connUser->prepare("SELECT * FROM mp_revendedores WHERE usuario_revendedor = ? LIMIT 1");
$stmtConfig->execute([$dono]);
$configPgto = $stmtConfig->fetch(PDO::FETCH_ASSOC);

$is_approved = false;

// 5. VALIDAÇÃO DE SEGURANÇA NA API OFICIAL (Evitar fraudes)
if ($gateway === 'mp' && !empty($configPgto['access_token'])) {
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.mercadopago.com/v1/payments/" . $payment_id,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [ "Authorization: Bearer " . trim($configPgto['access_token']) ],
    ]);
    $mp_data = json_decode(curl_exec($curl)); curl_close($curl);
    
    if (isset($mp_data->status) && $mp_data->status === 'approved') { $is_approved = true; }
    
} elseif ($gateway === 'asaas' && !empty($configPgto['access_token_asaas'])) {
    $curl = curl_init();
    curl_setopt_array($curl, [
        CURLOPT_URL => "https://api.asaas.com/v3/payments/" . $payment_id,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER => [ "access_token: " . trim($configPgto['access_token_asaas']) ],
    ]);
    $asaas_data = json_decode(curl_exec($curl)); curl_close($curl);
    
    if (isset($asaas_data->status) && in_array($asaas_data->status, ['RECEIVED', 'CONFIRMED'])) { $is_approved = true; }
}

// =========================================================================
// A MÁGICA: APROVADO, RENOVA TUDO E AVISA NO ZAP!
// =========================================================================
if ($is_approved) {
    $connUser->prepare("UPDATE pagamentos SET status = 'approved' WHERE id = ?")->execute([$pagamento['id']]);

    $venc_atual = (int)$revendedor['data_premio'];
    $base_calculo = ($venc_atual > time()) ? $venc_atual : time();
    $novo_vencimento = strtotime("+1 month", $base_calculo);

    // Remove bloqueios e atualiza data
    $connUser->prepare("UPDATE rev SET data_premio = ?, bloqueado = 'nao' WHERE id = ?")->execute([$novo_vencimento, $revendedor['id']]);
    $connUser->prepare("UPDATE usuario SET bloqueado = 'nao' WHERE CadUser = ?")->execute([$usuario_rev]);
    $connUser->prepare("UPDATE teste SET bloqueado = 'nao' WHERE CadUser = ?")->execute([$usuario_rev]);
    $connUser->prepare("UPDATE rev SET bloqueado = 'nao' WHERE CadUser = ?")->execute([$usuario_rev]);
    $connUser->prepare("UPDATE usuario SET bloqueado = 'nao' WHERE CadUser IN (SELECT usuario FROM rev WHERE CadUser = ?)")->execute([$usuario_rev]);

    // Avisa no Zap
    if (!empty($revendedor['whatsapp'])) {
        $stmtWpp = $connGeral->prepare("SELECT api_url, api_key, instancia FROM config_api_whatsapp WHERE usuario = ? LIMIT 1");
        $stmtWpp->execute([$dono]);
        $confZapAdmin = $stmtWpp->fetch(PDO::FETCH_ASSOC);

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

            $valor_fmt = number_format($pagamento['valor'], 2, ',', '.');
            $data_fmt = date('d/m/Y', $novo_vencimento);
            
            $mensagem = "✅ *Pagamento Confirmado!* ✅\n\nOlá *{$revendedor['nome']}*, recebemos o pagamento da sua fatura no valor de *R$ {$valor_fmt}*.\n\nO seu painel e a sua rede de clientes já foram renovados e desbloqueados automaticamente!\n\n📅 *Novo Vencimento:* {$data_fmt}\n\nObrigado pela preferência e ótimas vendas! 🚀";

            $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_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);
        }
    }
    
    http_response_code(200); echo "Sucesso!";
} else {
    http_response_code(200); echo "Pendente.";
}
?>
