-- Creación de la base de datos
CREATE DATABASE IF NOT EXISTS boletos_db;
USE boletos_db;

-- Tabla de salas
CREATE TABLE IF NOT EXISTS salas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100) NOT NULL,
    filas INT NOT NULL,
    asientos_por_fila INT NOT NULL
);

-- Tabla de boletos
CREATE TABLE IF NOT EXISTS boletos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_sala INT NOT NULL,
    fila INT NOT NULL,
    numero INT NOT NULL,
    precio DECIMAL(10,2) NOT NULL,
    estado ENUM('disponible', 'vendido') DEFAULT 'disponible',
    FOREIGN KEY (id_sala) REFERENCES salas(id),
    UNIQUE KEY unique_asiento (id_sala, fila, numero)
);

-- Tabla de ventas
CREATE TABLE IF NOT EXISTS ventas (
    id VARCHAR(36) PRIMARY KEY,
    fecha DATETIME NOT NULL,
    nombre_cliente VARCHAR(100) NOT NULL,
    total DECIMAL(10,2) NOT NULL
);

select * from ventas;

select * from venta_boletos;

select * from boletos;

-- Tabla relacional venta-boletos
CREATE TABLE IF NOT EXISTS venta_boletos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_venta VARCHAR(36) NOT NULL,
    id_boleto INT NOT NULL,
    FOREIGN KEY (id_venta) REFERENCES ventas(id),
    FOREIGN KEY (id_boleto) REFERENCES boletos(id),
    UNIQUE KEY unique_venta_boleto (id_venta, id_boleto)
);

-- Insertar una sala de ejemplo
INSERT INTO salas (id, nombre, filas, asientos_por_fila) 
VALUES (1, 'Sala Principal', 10, 15);

-- Procedimiento para inicializar boletos
DELIMITER //
CREATE PROCEDURE InicializaBoletos(IN sala_id INT, IN precio DECIMAL(10,2))
BEGIN
    DECLARE i INT DEFAULT 1;
    DECLARE j INT DEFAULT 1;
    DECLARE total_filas INT DEFAULT 0;
    DECLARE total_asientos INT DEFAULT 0;
    
    -- Obtener dimensiones de la sala
    SELECT filas, asientos_por_fila INTO total_filas, total_asientos
    FROM salas WHERE id = sala_id;
    
    -- Depuración: Verificar valores obtenidos
    SELECT CONCAT('Filas:', total_filas, ' Asientos:', total_asientos) AS Debug_Info;
    
    -- Si no se encuentran filas/asientos, salir del procedimiento
    IF total_filas = 0 OR total_asientos = 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Sala no encontrada o sin dimensiones definidas';
    END IF;

    -- Eliminar boletos existentes de la sala
    DELETE FROM boletos WHERE id_sala = sala_id;
    
    -- Crear nuevos boletos
    SET i = 1;
    WHILE i <= total_filas DO
        SET j = 1;
        WHILE j <= total_asientos DO
            INSERT INTO boletos (id_sala, fila, numero, precio, estado)
            VALUES (sala_id, i, j, precio, 'disponible');
            SET j = j + 1;
        END WHILE;
        SET i = i + 1;
    END WHILE;
END //
DELIMITER ;

CALL InicializaBoletos(1, 50.00);