<?php
session_start();
use MercadoPago\Client\Payment\PaymentClient;
use MercadoPago\MercadoPagoConfig;
// Incluir dependencias
require_once '../services/config_mercadopago.php';
require_once '../models/model_pedido.php';
require_once '../services/pdo_connection.php';
require_once '../services/MercadoPagoPedidoService.php';
require_once '../vendor/autoload.php';
// Configurar credenciales de Mercado Pago
if (!defined('MERCADOPAGO_ACCESS_TOKEN')) {
    header("Location: ../views/error_pedido.php?mensaje=Error%20de%20configuracion%20de%20Mercado%20Pago");
    exit;
}
MercadoPagoConfig::setAccessToken(MERCADOPAGO_ACCESS_TOKEN);
try {
    // Obtener parámetros de la URL
    $id_pedido = isset($_GET['id']) ? intval($_GET['id']) : null;
    $payment_id = isset($_GET['payment_id']) ? $_GET['payment_id'] : null;
    $external_reference = isset($_GET['external_reference']) ? $_GET['external_reference'] : null;
    $collection_status = isset($_GET['collection_status']) ? $_GET['collection_status'] : null;

    // Verificar si la URL indica un error (parámetros nulos)
    if ($payment_id === 'null' && $collection_status === 'null' && !empty($external_reference)) {
        $id_pedido = intval($external_reference);
        $pedidoModel = new Pedido();
        
        // Verificar que el pedido existe
        $pedido = $pedidoModel->getPedidoById($id_pedido);
        if (!$pedido) {
            header("Location: ../views/error_pedido.php?mensaje=Pedido%20no%20encontrado");
            exit;
        }

        $pedidoModel->aplicarEstadoMercadoPago($id_pedido, 'cancelled', $payment_id !== 'null' ? (string)$payment_id : null);

        // Mostrar interfaz de error
        ?>
        <!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 Compra</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>
        /* Variables de color de la taquería para consistencia */
        :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);
        }

        /* Contenedor principal con animación de entrada */
        .error-container {
            text-align: center;
            padding: 40px;
            background-color: var(--white);
            border-radius: 20px; /* Bordes redondeados como las tarjetas del menú */
            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;
        }

        /* Icono de advertencia con animación */
        .error-icon {
            font-size: 60px;
            color: var(--yellow-accent);
            margin-bottom: 20px;
            animation: shake 0.8s cubic-bezier(.36,.07,.19,.97) both;
        }

        /* Título del error */
        h1 {
            color: var(--dominant-red);
            font-size: 1.8rem;
            font-weight: 700;
            margin-top: 0;
            margin-bottom: 10px;
        }

        /* Mensaje descriptivo */
        p {
            color: var(--medium-gray);
            font-size: 1rem;
            line-height: 1.6;
        }

        /* Botón para volver al menú */
        .btn-menu {
            display: inline-block;
            margin-top: 25px;
            padding: 12px 30px;
            background-color: var(--dominant-red);
            color: var(--white);
            text-decoration: none;
            border-radius: 50px; /* Forma de píldora */
            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-menu:hover {
            transform: translateY(-3px);
            box-shadow: 0 7px 20px rgba(0, 0, 0, 0.2);
        }
        
        /* Definición de las animaciones */
        @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>HA OCURRIDO UN ERROR</h1>
        <p>
            Lo sentimos, no pudimos procesar tu pago y el pedido ha sido cancelado.
            ¡Pero no te preocupes, tus tacos te esperan! 🌮
        </p>
        <a href="https://taqueriaelmexicano.com.mx/views/menu.php" class="btn-menu">Volver al Menú</a>
    </div>
</body>
</html>
        <?php
        exit;
    }

    if (!$id_pedido || !$payment_id) {
        header("Location: ../views/error_pedido.php?mensaje=Faltan%20parametros%20requeridos");
        exit;
    }
    // Instanciar el modelo Pedido. El constructor ya se encarga de la conexión.
    $pedidoModel = new Pedido();
    // Verificar que el pedido existe
    $pedido = $pedidoModel->getPedidoById($id_pedido);
    if (!$pedido) {
        header("Location: ../views/error_pedido.php?mensaje=Pedido%20no%20encontrado");
        exit;
    }
    // Verificar que la referencia externa coincide con el ID del pedido
    if ($external_reference && $external_reference != $id_pedido) {
        header("Location: ../views/error_pedido.php?mensaje=Datos%20de%20pago%20invalidos");
        exit;
    }
    // Consultar el estado del pago en la API de Mercado Pago
    $client = new PaymentClient();
    $payment = $client->get($payment_id);
   
    if (!$payment || !isset($payment->status)) {
        header("Location: ../views/error_pedido.php?mensaje=No%20se%20pudo%20validar%20el%20pago");
        exit;
    }
   
    $pedidoModel->aplicarEstadoMercadoPago($id_pedido, $payment->status, (string)$payment_id);
   
    // Almacenar el ID del pedido en la sesión
    $_SESSION['last_pedido_id'] = $id_pedido;
    // Redirigir a la página de confirmación
    header("Location: ../views/confirmacion_pedido.php?id=" . $id_pedido);
    exit;
} catch (Exception $e) {
    // Si ocurre una excepción, redirigir a la página de error
    $mensaje = urlencode("Error al procesar el pago: " . $e->getMessage());
    header("Location: ../views/error_pedido.php?mensaje=" . $mensaje);
    exit;
}
?>