-- ============================================================
--  ESENCIAS DE MI TIERRA — Base de Datos
--  Academia Folclórica
-- ============================================================

CREATE DATABASE IF NOT EXISTS academia_folclorica
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_unicode_ci;

USE academia_folclorica;

-- ------------------------------------------------------------
-- Administradores
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS admins (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  nombre      VARCHAR(100) NOT NULL,
  email       VARCHAR(100) NOT NULL UNIQUE,
  password    VARCHAR(255) NOT NULL,
  creado_en   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Contraseña por defecto: admin123 (cambiar en primer login)
INSERT INTO admins (nombre, email, password)
VALUES ('Administrador', 'admin@academia.cl', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi');

-- ------------------------------------------------------------
-- Grupos / Clases
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS grupos (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  nombre      VARCHAR(100) NOT NULL,
  descripcion TEXT,
  horario     VARCHAR(100),
  profesor    VARCHAR(100),
  activo      TINYINT(1) DEFAULT 1,
  creado_en   TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO grupos (nombre, descripcion, horario, profesor) VALUES
('Infantil A',   'Niños 4-7 años',    'Lunes y Miércoles 16:00',  'Profesora Ana'),
('Infantil B',   'Niños 8-12 años',   'Martes y Jueves 17:00',    'Profesora Ana'),
('Juvenil',      'Jóvenes 13-17 años','Viernes 18:00',             'Profesor Carlos'),
('Adulto',       'Adultos 18+',       'Sábado 10:00',              'Profesor Carlos');

-- ------------------------------------------------------------
-- Alumnos
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS alumnos (
  id              INT AUTO_INCREMENT PRIMARY KEY,
  rut             VARCHAR(12) NOT NULL UNIQUE,
  nombre          VARCHAR(100) NOT NULL,
  apellido        VARCHAR(100) NOT NULL,
  fecha_nacimiento DATE,
  email           VARCHAR(100),
  telefono        VARCHAR(20),
  apoderado       VARCHAR(100),
  telefono_apoderado VARCHAR(20),
  grupo_id        INT,
  fecha_ingreso   DATE DEFAULT (CURRENT_DATE),
  activo          TINYINT(1) DEFAULT 1,
  notas           TEXT,
  creado_en       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (grupo_id) REFERENCES grupos(id) ON DELETE SET NULL
);

-- ------------------------------------------------------------
-- Mensualidades / Pagos
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS mensualidades (
  id              INT AUTO_INCREMENT PRIMARY KEY,
  alumno_id       INT NOT NULL,
  mes             TINYINT NOT NULL,   -- 1-12
  anio            YEAR NOT NULL,
  monto           DECIMAL(10,0) NOT NULL DEFAULT 15000,
  fecha_pago      DATE,
  metodo_pago     ENUM('efectivo','transferencia','otro') DEFAULT 'efectivo',
  estado          ENUM('pendiente','pagado','atrasado') DEFAULT 'pendiente',
  comprobante     VARCHAR(255),
  notas           TEXT,
  registrado_por  INT,
  creado_en       TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (alumno_id) REFERENCES alumnos(id) ON DELETE CASCADE,
  UNIQUE KEY unique_mensualidad (alumno_id, mes, anio)
);

-- ------------------------------------------------------------
-- Asistencia
-- ------------------------------------------------------------
CREATE TABLE IF NOT EXISTS asistencia (
  id          INT AUTO_INCREMENT PRIMARY KEY,
  alumno_id   INT NOT NULL,
  grupo_id    INT,
  fecha       DATE NOT NULL,
  presente    TINYINT(1) DEFAULT 0,
  justificado TINYINT(1) DEFAULT 0,
  nota        VARCHAR(255),
  creado_en   TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  FOREIGN KEY (alumno_id) REFERENCES alumnos(id) ON DELETE CASCADE,
  FOREIGN KEY (grupo_id)  REFERENCES grupos(id)  ON DELETE SET NULL,
  UNIQUE KEY unique_asistencia (alumno_id, fecha)
);

-- ------------------------------------------------------------
-- Vista útil: estado de pagos del mes actual
-- ------------------------------------------------------------
CREATE OR REPLACE VIEW v_alumnos_estado AS
SELECT
  a.id,
  a.rut,
  CONCAT(a.nombre, ' ', a.apellido) AS nombre_completo,
  a.email,
  a.telefono,
  g.nombre AS grupo,
  a.activo,
  (SELECT estado FROM mensualidades m
   WHERE m.alumno_id = a.id
     AND m.mes  = MONTH(CURDATE())
     AND m.anio = YEAR(CURDATE())
   LIMIT 1) AS estado_mes_actual,
  (SELECT COUNT(*) FROM mensualidades m
   WHERE m.alumno_id = a.id AND m.estado = 'pendiente') AS meses_pendientes
FROM alumnos a
LEFT JOIN grupos g ON a.grupo_id = g.id;
