-- Base de datos para Sistema de Agenda de Barbería
-- Creación de la base de datos
CREATE DATABASE IF NOT EXISTS agenda_barberia;
USE agenda_barberia;

-- Tabla de servicios
CREATE TABLE servicios (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    precio DECIMAL(10,2) NOT NULL,
    duracion_minutos INT NOT NULL,
    activo BOOLEAN DEFAULT TRUE
);

-- Tabla de clientes
CREATE TABLE clientes (
    id INT PRIMARY KEY AUTO_INCREMENT,
    nombre VARCHAR(100) NOT NULL,
    telefono VARCHAR(20) NOT NULL,
    fecha_registro TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Tabla de horarios de barberos (disponibilidad)
CREATE TABLE horarios_barberos (
    id INT PRIMARY KEY AUTO_INCREMENT,
    barbero_id INT NOT NULL,
    dia_semana ENUM('Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo') NOT NULL,
    hora_inicio TIME NOT NULL,
    hora_fin TIME NOT NULL,
    activo BOOLEAN DEFAULT TRUE,
    FOREIGN KEY (barbero_id) REFERENCES barberos(id) ON DELETE CASCADE
);

-- Tabla de días no disponibles (vacaciones, días libres)
CREATE TABLE dias_no_disponibles (
    id INT PRIMARY KEY AUTO_INCREMENT,
    barbero_id INT NOT NULL,
    fecha DATE NOT NULL,
    motivo VARCHAR(255),
    FOREIGN KEY (barbero_id) REFERENCES barberos(id) ON DELETE CASCADE
);

-- Tabla de citas
CREATE TABLE citas (
    id INT PRIMARY KEY AUTO_INCREMENT,
    barbero_id INT NOT NULL,
    cliente_id INT NOT NULL,
    servicio_id INT NOT NULL,
    fecha DATE NOT NULL,
    hora_inicio TIME NOT NULL,
    hora_fin TIME NOT NULL,
    estado ENUM('pendiente','confirmada','completada','cancelada') DEFAULT 'pendiente',
    precio DECIMAL(10,2) NOT NULL,
    notas TEXT,
    fecha_creacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    fecha_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (barbero_id) REFERENCES barberos(id),
    FOREIGN KEY (cliente_id) REFERENCES clientes(id),
    FOREIGN KEY (servicio_id) REFERENCES servicios(id)
);

-- Insertar datos iniciales

-- Servicios básicos
INSERT INTO servicios (nombre, precio, duracion_minutos) VALUES
('Corte', 25.00, 30),
('Corte + Barba', 40.00, 60);

-- Horarios por defecto para todos los barberos (Lunes a Sábado 8:00 AM - 6:00 PM)
INSERT INTO horarios_barberos (barbero_id, dia_semana, hora_inicio, hora_fin) VALUES
-- Juan
(1, 'Lunes', '08:00:00', '18:00:00'),
(1, 'Martes', '08:00:00', '18:00:00'),
(1, 'Miércoles', '08:00:00', '18:00:00'),
(1, 'Jueves', '08:00:00', '18:00:00'),
(1, 'Viernes', '08:00:00', '18:00:00'),
(1, 'Sábado', '08:00:00', '18:00:00'),
-- Miguel
(2, 'Lunes', '08:00:00', '18:00:00'),
(2, 'Martes', '08:00:00', '18:00:00'),
(2, 'Miércoles', '08:00:00', '18:00:00'),
(2, 'Jueves', '08:00:00', '18:00:00'),
(2, 'Viernes', '08:00:00', '18:00:00'),
(2, 'Sábado', '08:00:00', '18:00:00'),
-- Eduardo
(3, 'Lunes', '08:00:00', '18:00:00'),
(3, 'Martes', '08:00:00', '18:00:00'),
(3, 'Miércoles', '08:00:00', '18:00:00'),
(3, 'Jueves', '08:00:00', '18:00:00'),
(3, 'Viernes', '08:00:00', '18:00:00'),
(3, 'Sábado', '08:00:00', '18:00:00');

-- Índices para optimización
CREATE INDEX idx_citas_barbero_fecha ON citas(barbero_id, fecha);
CREATE INDEX idx_citas_cliente_fecha ON citas(cliente_id, fecha);
CREATE INDEX idx_horarios_barbero ON horarios_barberos(barbero_id, dia_semana);