-- ACTIVIDAD 1

-- 1. Tabla Profesores
CREATE TABLE Profesores (
    ProfesorId INTEGER PRIMARY KEY AUTOINCREMENT,
    Nombre TEXT NOT NULL,
    Especialidad TEXT,
    Email TEXT UNIQUE NOT NULL
);

-- 2. Tabla Asignaturas
CREATE TABLE Asignaturas (
    AsignaturaId INTEGER PRIMARY KEY AUTOINCREMENT,
    Nombre TEXT NOT NULL,
    ProfesorId INTEGER NOT NULL,
    Creditos INTEGER CHECK(Creditos BETWEEN 1 AND 10),
    FOREIGN KEY (ProfesorId) REFERENCES Profesores(ProfesorId)
);

-- 3. Tabla Estudiantes
CREATE TABLE Estudiantes (
    EstudianteId INTEGER PRIMARY KEY AUTOINCREMENT,
    Nombre TEXT NOT NULL,
    Email TEXT UNIQUE NOT NULL,
    FechaInscripcion TEXT DEFAULT CURRENT_TIMESTAMP
);

-- 4. Tabla Matriculas
CREATE TABLE Matriculas (
    MatriculaId INTEGER PRIMARY KEY AUTOINCREMENT,
    EstudianteId INTEGER NOT NULL,
    AsignaturaId INTEGER NOT NULL,
    Nota REAL CHECK(Nota BETWEEN 0 AND 10),
    FOREIGN KEY (EstudianteId) REFERENCES Estudiantes(EstudianteId),
    FOREIGN KEY (AsignaturaId) REFERENCES Asignaturas(AsignaturaId)
);

-- Insertar datos

-- 2 profesores
INSERT INTO Profesores (Nombre, Especialidad, Email) VALUES
    ('Ana García', 'Matemáticas', 'ana.garcia@escuela.com'),
    ('Carlos López', 'Historia', 'carlos.lopez@escuela.com');

-- 3 asignaturas
INSERT INTO Asignaturas (Nombre, ProfesorId, Creditos) VALUES
    ('Álgebra', 1, 6),
    ('Geometría', 1, 4),
    ('Historia Medieval', 2, 5);

-- 3 estudiantes
INSERT INTO Estudiantes (Nombre, Email) VALUES
    ('Juan Pérez', 'juan.perez@estudiante.com'),
    ('María González', 'maria.gonzalez@estudiante.com'),
    ('Pedro Martínez', 'pedro.martinez@estudiante.com');

-- 5 matrículas
INSERT INTO Matriculas (EstudianteId, AsignaturaId, Nota) VALUES
    (1, 1, 8.5),
    (1, 2, 7.0),
    (2, 1, 9.0),
    (2, 3, 8.0),
    (3, 2, NULL);

-- Crear índice en Email de Estudiantes
CREATE INDEX idx_estudiantes_email ON Estudiantes(Email);

-- Añadir columna Telefono a Profesores
ALTER TABLE Profesores ADD COLUMN Telefono TEXT;


-- ACTIVIDAD 2

-- 1. Tabla Habitaciones
CREATE TABLE Habitaciones (
    HabitacionId INTEGER PRIMARY KEY AUTOINCREMENT,
    Numero TEXT NOT NULL,
    Tipo TEXT NOT NULL,
    PrecioPorNoche REAL NOT NULL,
    Disponible INTEGER DEFAULT 1
);

-- 2. Tabla Reservas
CREATE TABLE Reservas (
    ReservaId INTEGER PRIMARY KEY AUTOINCREMENT,
    HabitacionId INTEGER NOT NULL,
    NombreCliente TEXT NOT NULL,
    FechaEntrada TEXT NOT NULL,
    FechaSalida TEXT NOT NULL,
    TotalPagado REAL NOT NULL,
    FOREIGN KEY (HabitacionId) REFERENCES Habitaciones(HabitacionId)
);

-- 3. Insertar 5 habitaciones
INSERT INTO Habitaciones (Numero, Tipo, PrecioPorNoche, Disponible) VALUES
    ('101', 'Individual', 50.00, 1),
    ('102', 'Doble', 80.00, 1),
    ('103', 'Suite', 150.00, 1),
    ('201', 'Individual', 55.00, 1),
    ('202', 'Doble', 85.00, 1);

-- 4. Transacción para crear una reserva
BEGIN TRANSACTION;

-- Marcar habitación como no disponible
UPDATE Habitaciones SET Disponible = 0 WHERE HabitacionId = 1;

-- Insertar la reserva
INSERT INTO Reservas (HabitacionId, NombreCliente, FechaEntrada, FechaSalida, TotalPagado)
VALUES (1, 'Juan Pérez', '2026-02-01', '2026-02-05', 200.00);

-- Si todo está bien, confirmar
COMMIT;

-- Si algo sale mal, deshacer con: ROLLBACK;
