<?php
/**
 * Webhook Mercado Pago
 * Recebe notificações de alteração de status de pagamento
 */

require_once 'mp-config.php';
include '../adm/config/db.php';
require_once __DIR__ . '/inc/mailer.php';
require_once __DIR__ . '/inc/email_templates.php';

// Receber o corpo da requisição
$body = file_get_contents('php://input');
$data = json_decode($body, true);

// Registra log para depuração
$logFile = 'mp_webhook_log.txt';
file_put_contents($logFile, "[" . date('Y-m-d H:i:s') . "] " . $body . "\n", FILE_APPEND);

// Verificar se é uma notificação de pagamento
if (isset($data['type']) && $data['type'] === 'payment') {
    $paymentId = $data['data']['id'];

    // Consultar detalhes do pagamento na API do Mercado Pago
    $ch = curl_init("https://api.mercadopago.com/v1/payments/" . $paymentId);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . MP_ACCESS_TOKEN
    ]);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $response = curl_exec($ch);
    $paymentData = json_decode($response, true);
    curl_close($ch);

    if (isset($paymentData['status'])) {
        $status = $paymentData['status'];
        $externalReference = $paymentData['external_reference'];
        
        // Mapear status do Mercado Pago para o nosso banco
        $novoStatus = 'pendente';
        $statusPagamento = $status;

        if ($status === 'approved') {
            $novoStatus = 'pago';
        } elseif ($status === 'rejected') {
            $novoStatus = 'cancelado';
        } elseif ($status === 'in_process') {
            $novoStatus = 'processando';
        }

        // Atualizar o banco de dados
        $sql = "UPDATE pedidos SET status = ?, status_pagamento = ?, mercado_pago_id = ?, data_pagamento = NOW() WHERE external_reference = ?";
        $stmt = $conn->prepare($sql);
        $stmt->bind_param("ssss", $novoStatus, $statusPagamento, $paymentId, $externalReference);
        $stmt->execute();

        // Salva no log de pagamentos
        $payload = json_encode($paymentData);
        $sqlLog = "INSERT INTO pagamentos_log (pedido_id, mp_id, status, payload) 
                   SELECT id, ?, ?, ? FROM pedidos WHERE external_reference = ?";
        $stmtLog = $conn->prepare($sqlLog);
        $stmtLog->bind_param("ssss", $paymentId, $statusPagamento, $payload, $externalReference);
        $stmtLog->execute();

        // Envia e-mail de atualização de status ao cliente
        try {
            $sqlPedido = "SELECT p.id, p.total, p.status, u.nome_completo, u.email_principal
                          FROM pedidos p
                          JOIN usuarios u ON u.id = p.usuario_id
                          WHERE p.external_reference = ? LIMIT 1";
            $stmtPed = $conn->prepare($sqlPedido);
            $stmtPed->bind_param("s", $externalReference);
            $stmtPed->execute();
            $resPed = $stmtPed->get_result();
            if ($dadosPedido = $resPed->fetch_assoc()) {
                $loja     = _getLojaEmailData($conn);
                $assunto  = _statusIcon($novoStatus) . ' Pedido #' . $dadosPedido['id'] . ' - ' . _statusLabel($novoStatus) . ' | ' . $loja['nome'];
                $htmlEmail = emailStatusPedido(
                    (int)$dadosPedido['id'],
                    $novoStatus,
                    $dadosPedido['nome_completo'],
                    (float)$dadosPedido['total'],
                    $loja
                );
                enviarEmail($dadosPedido['email_principal'], $dadosPedido['nome_completo'], $assunto, $htmlEmail);
            }
        } catch (\Throwable $ex) {
            error_log('[WEBHOOK-EMAIL] ' . $ex->getMessage());
        }
    }
}

// Responder com 200 OK para o Mercado Pago
http_response_code(200);
echo "OK";
