<?php
session_start();

use MercadoPago\Client\Payment\PaymentClient;
use MercadoPago\MercadoPagoConfig;

// Incluir dependencias
require_once __DIR__ . '/../services/config_mercadopago.php';
require_once __DIR__ . '/../models/model_agenda.php';
require_once __DIR__ . '/../vendor/autoload.php';

// Configurar credenciales de Mercado Pago
if (!defined('MERCADOPAGO_ACCESS_TOKEN')) {
    die("Error de configuración de Mercado Pago.");
}
MercadoPagoConfig::setAccessToken(MERCADOPAGO_ACCESS_TOKEN);

try {
    // Obtener parámetros de la URL
    $payment_id = $_GET['payment_id'] ?? null;
    $status_mp = $_GET['status'] ?? null;
    $external_reference = $_GET['external_reference'] ?? null;

    // CASO ESPECIAL: El usuario canceló o hubo un error antes de generar un ID de pago.
    if ($payment_id === 'null' && !empty($external_reference)) {
        $id_agenda = intval($external_reference);
        $model = new AgendaModel();
        
        $model->actualizarEstadoPagoAgenda($id_agenda, 'CANCELADO', null, 'N/A');

        // Mostramos la interfaz de error directamente
        ?>
        <!DOCTYPE html>
        <html lang="es">
        <head>
            <meta charset="UTF-8">
            <meta name="viewport" content="width=device-width, initial-scale=1.0">
            <title>Error en la Reservación</title>
            <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;600;700&display=swap" rel="stylesheet">
            <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
            <style>
                :root {
                    --dominant-red: #d32f2f;
                    --dark-gray: #212121;
                    --medium-gray: #616161;
                    --light-gray: #f5f5f5;
                    --yellow-accent: #F9A825;
                    --white: #FFFFFF;
                }
                body {
                    font-family: 'Poppins', sans-serif;
                    display: flex;
                    justify-content: center;
                    align-items: center;
                    height: 100vh;
                    margin: 0;
                    background-color: var(--light-gray);
                    color: var(--dark-gray);
                }
                .error-container {
                    text-align: center;
                    padding: 40px;
                    background-color: var(--white);
                    border-radius: 20px;
                    box-shadow: 0 8px 30px rgba(0, 0, 0, 0.1);
                    max-width: 90%;
                    width: 500px;
                    animation: fadeInScale 0.5s cubic-bezier(0.25, 0.8, 0.25, 1) forwards;
                }
                .error-icon {
                    font-size: 60px;
                    color: var(--yellow-accent);
                    margin-bottom: 20px;
                    animation: shake 0.8s cubic-bezier(.36,.07,.19,.97) both;
                }
                h1 {
                    color: var(--dominant-red);
                    font-size: 1.8rem;
                    font-weight: 700;
                    margin: 0 0 10px;
                }
                p {
                    color: var(--medium-gray);
                    font-size: 1rem;
                    line-height: 1.6;
                }
                .btn-return {
                    display: inline-block;
                    margin-top: 25px;
                    padding: 12px 30px;
                    background-color: var(--dominant-red);
                    color: var(--white);
                    text-decoration: none;
                    border-radius: 50px;
                    font-weight: 600;
                    font-size: 1rem;
                    transition: transform 0.2s ease, box-shadow 0.2s ease;
                    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15);
                }
                .btn-return:hover {
                    transform: translateY(-3px);
                    box-shadow: 0 7px 20px rgba(0, 0, 0, 0.2);
                }
                @keyframes fadeInScale { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } }
                @keyframes shake { 10%, 90% { transform: translate3d(-1px, 0, 0); } 20%, 80% { transform: translate3d(2px, 0, 0); } 30%, 50%, 70% { transform: translate3d(-4px, 0, 0); } 40%, 60% { transform: translate3d(4px, 0, 0); } }
            </style>
        </head>
        <body>
            <div class="error-container">
                <i class="fas fa-exclamation-triangle error-icon"></i>
                <h1>PAGO CANCELADO</h1>
                <p>
                    No se pudo procesar tu pago y la reservación ha sido cancelada.
                    ¡Pero no te preocupes, tu taquiza te espera! 🌮
                </p>
                <a href="https://taqueriaelmexicano.com.mx/views/agendar.php" class="btn-return">Intentar de Nuevo</a>
            </div>
        </body>
        </html>
        <?php
        exit; // Detenemos la ejecución del script aquí
    }

    // --- FLUJO NORMAL (SI EL PAGO NO FUE CANCELADO) ---

    if (empty($payment_id) || empty($external_reference)) {
        throw new Exception("Faltan parámetros de pago requeridos.");
    }

    $id_agenda = intval($external_reference);
    $model = new AgendaModel();
    
    $client = new PaymentClient();
    $payment = $client->get($payment_id);
    
    if (!$payment || !isset($payment->status)) {
        throw new Exception("No se pudo obtener el estado del pago de Mercado Pago.");
    }

    $status_mp_api = $payment->status;
    $nuevo_estado_agenda = 'RESERVADO';

    if ($status_mp_api === 'approved') {
        $nuevo_estado_agenda = 'RESERVADO';
    } else {
        $nuevo_estado_agenda = 'CANCELADO';
    }

    $model->actualizarEstadoPagoAgenda($id_agenda, $nuevo_estado_agenda, null, $payment_id);

    if ($nuevo_estado_agenda === 'RESERVADO') {
        // ✅ CORRECCIÓN: Redirigir a 'miagenda.php' en caso de éxito.
        header("Location: ../views/miagenda.php?id_agenda=" . $id_agenda . "&status=" . $nuevo_estado_agenda);
    } else {
        // Si el pago es rechazado por otra razón, también mostramos la interfaz de error
        header("Location: " . $_SERVER['PHP_SELF'] . "?payment_id=null&external_reference=" . $id_agenda);
    }
    exit;

} catch (Exception $e) {
    // Manejo de errores genéricos
    $mensaje = urlencode("Error crítico al procesar el pago: " . $e->getMessage());
    header("Location: ../views/agendar.php?mensaje=" . $mensaje);
    exit;
}
?>