<?php
// webhook_mp.php - Recebe as fofocas do Mercado Pago
require_once 'config.php';

error_reporting(0);
ini_set('display_errors', 0);

$pdo = getConexaoAtiva();

// O Mercado Pago pode enviar dados pelo $_GET['data_id'] ou por um JSON bruto
$json_input = file_get_contents('php://input');
$payload = json_decode($json_input, true);

$payment_id = null;

if (isset($_GET['data_id'])) {
    $payment_id = $_GET['data_id'];
} elseif (isset($payload['data']['id'])) {
    $payment_id = $payload['data']['id'];
}

if (!$payment_id) {
    http_response_code(200); 
    exit("Sem ID");
}

// Para termos segurança total de que não é um hacker forjando o pagamento,
// nós pegamos o ID que o webhook mandou e perguntamos pro próprio Mercado Pago se é verdade.
try {
    $config_pag = $pdo->query("SELECT mp_token FROM config_pagamentos LIMIT 1")->fetch(PDO::FETCH_ASSOC);
    $mp_token = $config_pag['mp_token'];

    if (empty($mp_token)) { http_response_code(200); exit('MP nao configurado.'); }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://api.mercadopago.com/v1/payments/" . $payment_id);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Bearer " . $mp_token]);
    $response = curl_exec($ch);
    curl_close($ch);

    $payment_info = json_decode($response, true);

    // Se o MP confirmar que o pagamento foi APROVADO
    if (isset($payment_info['status']) && $payment_info['status'] == 'approved') {
        
        $txid = $payment_info['external_reference'] ?? ''; // Lembra do txid? (TOP_IPTV_...)
        
        if (!empty($txid)) {
            // Busca a fatura que geramos hoje mais cedo
            $stmt = $pdo->prepare("SELECT * FROM faturas_pix WHERE txid = ? AND status = 'pendente'");
            $stmt->execute([$txid]);
            $fatura = $stmt->fetch(PDO::FETCH_ASSOC);

            if ($fatura) {
                $user_id = $fatura['user_id'];
                $qtd_creditos = $fatura['qtd_creditos'];

                // 1. Injeta os créditos na conta do revendedor
                $stmtAdd = $pdo->prepare("UPDATE reg_users SET credits = credits + ? WHERE id = ?");
                $stmtAdd->execute([$qtd_creditos, $user_id]);

                // 2. Marca a fatura como paga para ele não receber em dobro se o MP mandar o aviso duas vezes
                $stmtUp = $pdo->prepare("UPDATE faturas_pix SET status = 'pago' WHERE id = ?");
                $stmtUp->execute([$fatura['id']]);
            }
        }
    }
} catch (Exception $e) {}

// Sempre responder 200 pro MP parar de encher o saco tentando reenviar o aviso
http_response_code(200);
echo json_encode(['status' => 'ok']);
?>