<?php
header("Content-Type: application/json");
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once "conexion-bd.php";

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(["mensaje" => "Método no permitido."]);
    exit();
}

$evento_id = intval($_POST['evento_id']);
$asientos = json_decode($_POST['asientos'], true);
$cantidad = intval($_POST['cantidad']);

if (empty($asientos)) {
    echo json_encode(["mensaje" => "Debes seleccionar al menos un asiento."]);
    exit();
}

$sql_evento = "SELECT c.precio, c.lugar_id, l.capacidad 
               FROM conciertos c
               JOIN lugares l ON c.lugar_id = l.id
               WHERE c.id = ?";
$stmt_evento = $conn->prepare($sql_evento);
$stmt_evento->bind_param("i", $evento_id);
$stmt_evento->execute();
$result_evento = $stmt_evento->get_result();
$evento = $result_evento->fetch_assoc();

if (!$evento) {
    echo json_encode(["mensaje" => "Error: No se encontró el evento."]);
    exit();
}

$precio_unitario = $evento['precio'];
$lugar_id = $evento['lugar_id'];
$capacidad = $evento['capacidad'];

if (count($asientos) > $capacidad) {
    echo json_encode(["mensaje" => "Error: Estás intentando comprar más boletos de los permitidos."]);
    exit();
}

$total = count($asientos) * $precio_unitario;

// 🔹 Insertar la compra en la tabla `ventas`
$sql = "INSERT INTO ventas (evento_id, cantidad, total) VALUES (?, ?, ?)";
$stmt = $conn->prepare($sql);
$stmt->bind_param("iid", $evento_id, $cantidad, $total);

if ($stmt->execute()) {
    $id_compra = $conn->insert_id;

    // 🔹 Actualizar el estado de los asientos y obtener su ID
    $sql_asiento_update = "UPDATE asientos SET estado = 'vendido' WHERE numero_asiento = ? AND lugar_id = ?";
    $stmt_asiento_update = $conn->prepare($sql_asiento_update);

    $sql_obtener_asiento_id = "SELECT id FROM asientos WHERE numero_asiento = ? AND lugar_id = ?";
    $stmt_asiento_id = $conn->prepare($sql_obtener_asiento_id);

    // 🔹 Insertar registro en ventas_asientos con precio real
    $sql_ventas_asientos = "INSERT INTO ventas_asientos (venta_id, asiento_id, precio) VALUES (?, ?, ?)";
    $stmt_ventas_asientos = $conn->prepare($sql_ventas_asientos);

    foreach ($asientos as $asiento) {
        $asientoSeleccionado = trim($asiento);

        // Actualizar estado del asiento
        $stmt_asiento_update->bind_param("si", $asientoSeleccionado, $lugar_id);
        if (!$stmt_asiento_update->execute()) {
            echo json_encode(["mensaje" => "Error actualizando asiento: " . $stmt_asiento_update->error]);
            exit();
        }

        // Obtener ID del asiento
        $stmt_asiento_id->bind_param("si", $asientoSeleccionado, $lugar_id);
        $stmt_asiento_id->execute();
        $result_asiento = $stmt_asiento_id->get_result();
        $asiento_data = $result_asiento->fetch_assoc();

        if (!$asiento_data) {
            echo json_encode(["mensaje" => "Error: asiento no encontrado."]);
            exit();
        }

        $asiento_id = $asiento_data['id'];

        // Insertar en ventas_asientos con precio real del evento
        $stmt_ventas_asientos->bind_param("iid", $id_compra, $asiento_id, $precio_unitario);
        if (!$stmt_ventas_asientos->execute()) {
            echo json_encode(["mensaje" => "Error al insertar venta_asiento: " . $stmt_ventas_asientos->error]);
            exit();
        }
    }

    echo json_encode(["mensaje" => "Compra realizada exitosamente.", "id_compra" => $id_compra]);
} else {
    echo json_encode(["mensaje" => "Error al procesar la compra: " . $conn->error]);
}

$stmt->close();
$conn->close();
?>