<?php
// controllers/controller_agenda.php

// Asegúrate de que no haya espacios o líneas en blanco antes de esta etiqueta.
header('Content-Type: application/json');

require_once '../models/model_agenda.php';
require_once '../services/config_mercadopago.php';

use MercadoPago\Client\Preference\PreferenceClient;
use MercadoPago\Exceptions\MPApiException;

$response = ['success' => false, 'message' => 'Error desconocido.'];

try {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        throw new Exception("Método de solicitud no permitido.", 405);
    }

    $action = $_POST['action'] ?? null;
    $model = new AgendaModel();

    switch ($action) {
        case 'verificar_disponibilidad':
            $fecha = $_POST['fecha_evento'] ?? null;
            $hora = $_POST['hora_evento'] ?? null;

            if (empty($fecha) || empty($hora)) {
                throw new Exception("Faltan datos de fecha u hora para la verificación.");
            }

            if ($model->verificarConflictoReservacion($fecha, $hora)) {
                $response = ['success' => false, 'message' => 'conflicto_reservacion'];
            } else {
                $response = ['success' => true, 'message' => 'Horario disponible.'];
            }
            break;

        case 'crear_preferencia_pago':
            $productoId = $_POST['id_producto_evento'] ?? null;
            $anticipo_a_pagar = $_POST['anticipo'] ?? 0;
            $concepto = $_POST['concepto_evento'] ?? 'Reserva de Taquiza';
            $id_agenda = $_POST['id_agenda'] ?? null;
            
            if (empty($id_agenda) || empty($productoId) || empty($anticipo_a_pagar)) {
                throw new Exception("Faltan datos obligatorios para generar el pago.");
            }

            $client = new PreferenceClient();
            $preference = $client->create([
                "items" => [
                    [
                        "title" => "Anticipo para: " . $concepto,
                        "quantity" => 1,
                        "unit_price" => (float)$anticipo_a_pagar,
                        "currency_id" => "MXN",
                        "id" => $productoId
                    ]
                ],
                "external_reference" => strval($id_agenda),
                "back_urls" => [
                    "success" => "https://taqueriaelmexicano.com.mx/services/mercadopago_return.php",
                    "failure" => "https://taqueriaelmexicano.com.mx/services/mercadopago_return.php",
                    "pending" => "https://taqueriaelmexicano.com.mx/services/mercadopago_return.php"
                ],
                "auto_return" => "approved",
                "metadata" => $_POST
            ]);

            $response = [
                'success' => true,
                'message' => 'Preferencia de pago creada con éxito.',
                'init_point' => $preference->init_point
            ];
            break;

        case 'guardar_reserva':
            $metodo_pago = $_POST['metodo_pago'] ?? 'mercadopago';

            // ✅ INICIO DE LA MODIFICACIÓN
            // Se define el anticipo basado en el método de pago para asegurar la lógica de negocio.
            $anticipo = 0; // Por defecto, el anticipo es 0 (para pago en sucursal).
            if ($metodo_pago === 'mercadopago') {
                // Solo si el pago es con Mercado Pago, se toma el valor del formulario.
                $anticipo = $_POST['anticipo'] ?? 0;
            }
            // ✅ FIN DE LA MODIFICACIÓN

            $data = [
                'id_producto_evento' => $_POST['id_producto_evento'] ?? null,
                'fecha_evento'       => $_POST['fecha_evento'] ?? null,
                'hora_evento'        => $_POST['hora_evento'] ?? null,
                'nombre_cliente'     => $_POST['nombre_cliente'] ?? null,
                'telefono'           => $_POST['telefono'] ?? null,
                'direccion_texto'    => $_POST['direccion_texto'] ?? null,
                'referencia'         => $_POST['referencia'] ?? null,
                'notas'              => $_POST['notas'] ?? null,
                'concepto'           => $_POST['concepto_evento'] ?? null,
                'anticipo'           => $anticipo, // Se usa la variable segura que se calculó arriba.
                'metodo_pago'        => $metodo_pago
            ];
            
            if (empty($data['id_producto_evento']) || empty($data['fecha_evento']) || empty($data['hora_evento']) || empty($data['nombre_cliente'])) {
                throw new Exception("Faltan campos obligatorios para la reservación.");
            }

            $id_agenda = $model->guardarAgenda($data);

            if ($id_agenda) {
                $response = [
                    'success' => true,
                    'message' => 'Reservación guardada con éxito.',
                    'id_agenda' => $id_agenda
                ];
            } else {
                throw new Exception("No se pudo guardar la reservación.");
            }
            break;

        default:
            throw new Exception("Acción no válida o no especificada.");
    }

} catch (MPApiException $e) {
    $apiResponse = $e->getApiResponse();
    $errorData = $apiResponse->data ?? null;
    $errorMessage = 'Error en la API de Mercado Pago: ';
    $errorMessage .= (is_array($errorData) && isset($errorData['message'])) ? $errorData['message'] : 'Error desconocido.';
    if (strpos($e->getMessage(), 'SSL') !== false) {
        $errorMessage .= " (Posiblemente un problema de SSL. Verifica si tu entorno es HTTPS)";
    }
    error_log($errorMessage);
    $response['message'] = $errorMessage;

} catch (Exception $e) {
    $response['message'] = 'Error en el servidor: ' . $e->getMessage();
}

echo json_encode($response);
exit;
