USE TicketFei;

CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
	nombre VARCHAR(255) NOT NULL,
    apellidoPaterno VARCHAR(255) NOT NULL,
	apellidoMaterno VARCHAR(255) NOT NULL,
    usuario VARCHAR(255) NOT NULL,
    contraseña VARCHAR(255) NOT NULL
);
INSERT INTO usuarios (nombre, apellidoPaterno, apellidoMaterno, usuario, contraseña) VALUES 
('Aaron', 'Bonilla', 'Gonzalez', 's22', '123'),
('Carlos', 'Palestina', 'Alducin', 's23', '123'),
('Miguel', 'Diaz', 'Villa', 's24', '123');

SELECT * FROM usuarios;
DROP TABLE usuarios;

-- concierto
CREATE TABLE conciertos (
    id_concierto INT AUTO_INCREMENT PRIMARY KEY,
    nombre_concierto VARCHAR(255) NOT NULL,
    artista VARCHAR(255) NOT NULL,
    fecha DATE NOT NULL,
    calle VARCHAR(255) NOT NULL,
    colonia VARCHAR(255) NOT NULL,
    numero_direccion VARCHAR(255) NOT NULL,
    codigo_postal VARCHAR(10) NOT NULL,
    estado VARCHAR(255) NOT NULL,
    capacidad_total INT NOT NULL
);
INSERT INTO conciertos (nombre_concierto, artista, fecha, calle, colonia, numero_direccion, codigo_postal, estado, capacidad_total)  
SELECT * FROM conciertos;
DROP TABLE conciertos;
-- Zona
CREATE TABLE zonas (
    id_zona INT AUTO_INCREMENT PRIMARY KEY,
    id_concierto INT NOT NULL,
    nombre_zona ENUM('General', 'Plata', 'Oro', 'VIP') NOT NULL,
    capacidad INT NOT NULL,
    precio DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (id_concierto) REFERENCES conciertos(id_concierto) ON DELETE CASCADE
);

DROP TABLE zonas;
-- Obtener todos los conciertos con sus zonas y precios
SELECT c.id_concierto, c.nombre_concierto, c.artista, c.fecha, 
       z.nombre_zona, z.capacidad, z.precio
FROM conciertos c
JOIN zonas z ON c.id_concierto = z.id_concierto;

-- Consultar un concierto específico con sus zonas
SELECT c.nombre_concierto, c.artista, c.fecha, 
       z.nombre_zona, z.capacidad, z.precio
FROM conciertos c
JOIN zonas z ON c.id_concierto = z.id_concierto
WHERE c.id_concierto = 1;

-- Tabla Asientos
CREATE TABLE asientos (
    id_asiento INT AUTO_INCREMENT PRIMARY KEY,
    id_zona INT NOT NULL,
    numero_asiento INT NOT NULL,
    estado ENUM('disponible', 'ocupado') NOT NULL DEFAULT 'disponible',
    FOREIGN KEY (id_zona) REFERENCES zonas(id_zona) ON DELETE CASCADE,
    UNIQUE (id_zona, numero_asiento) -- Para evitar asientos duplicados en la misma zona
);
DROP TABLE asientos;

-- Tabla Boletos
CREATE TABLE boletos (
    id_boleto INT AUTO_INCREMENT PRIMARY KEY,
    id_concierto INT NOT NULL,
    id_zona INT NOT NULL,
    id_asiento INT NOT NULL,
    nombre_comprador VARCHAR(255) NOT NULL,
    precio DECIMAL(10,2) NOT NULL,
    fecha_concierto DATE NOT NULL,
    artista VARCHAR(255) NOT NULL,
    FOREIGN KEY (id_concierto) REFERENCES conciertos(id_concierto) ON DELETE CASCADE,
    FOREIGN KEY (id_zona) REFERENCES zonas(id_zona) ON DELETE CASCADE,
    FOREIGN KEY (id_asiento) REFERENCES asientos(id_asiento) ON DELETE CASCADE,
    UNIQUE (id_asiento) -- Evita que un asiento se venda dos veces
);
DROP TABLE boletos;