-- =============================================
-- BASE DE DATOS: Sistema de Evaluaciones
-- Backend Node.js
-- =============================================

USE `zlefyyxhey_boletas_system`;

SET FOREIGN_KEY_CHECKS = 0;

-- Tabla: unidades educativas
DROP TABLE IF EXISTS unidades;
CREATE TABLE unidades (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    codigo VARCHAR(50),
    director VARCHAR(255),
    telefono VARCHAR(50),
    ano_escolar VARCHAR(20) DEFAULT '2025-2026',
    momento1 VARCHAR(50) DEFAULT '1er Lapso',
    momento2 VARCHAR(50) DEFAULT '2do Lapso',
    momento3 VARCHAR(50) DEFAULT '3er Lapso',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;

-- Tabla: usuarios (admin/docentes)
DROP TABLE IF EXISTS usuarios;
CREATE TABLE usuarios (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE NOT NULL,
    usuario VARCHAR(255) UNIQUE,
    password VARCHAR(255) NOT NULL,
    rol VARCHAR(50) DEFAULT 'docente',
    unidad_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- Tabla: configuración de unidad
DROP TABLE IF EXISTS configuracion;
CREATE TABLE configuracion (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    momento1 VARCHAR(50) DEFAULT '1er Lapso',
    momento2 VARCHAR(50) DEFAULT '2do Lapso',
    momento3 VARCHAR(50) DEFAULT '3er Lapso',
    ano_escolar VARCHAR(20) DEFAULT '2025-2026',
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- Tabla: cursos
DROP TABLE IF EXISTS cursos;
CREATE TABLE cursos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    grado VARCHAR(50),
    seccion VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- Tabla: alumnos
DROP TABLE IF EXISTS alumnos;
CREATE TABLE alumnos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT DEFAULT NULL,
    nombre VARCHAR(255) NOT NULL,
    apellido VARCHAR(255) NOT NULL,
    sexo ENUM('M','F') DEFAULT NULL,
    fecha_nac VARCHAR(50) DEFAULT NULL,
    cedula_representante VARCHAR(50) DEFAULT NULL,
    telefono_representante VARCHAR(50) DEFAULT NULL,
    curso_id INT DEFAULT NULL,
    foto_url VARCHAR(500) DEFAULT NULL,
    created_at TIMESTAMP NULL DEFAULT current_timestamp(),
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE,
    FOREIGN KEY (curso_id) REFERENCES cursos(id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- Tabla: materias
DROP TABLE IF EXISTS materias;
CREATE TABLE materias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    descripcion TEXT,
    icono VARCHAR(10) DEFAULT '📚',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE
) ENGINE=InnoDB;

-- Tabla: competencias
DROP TABLE IF EXISTS competencias;
CREATE TABLE competencias (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    descripcion TEXT,
    materia_id INT,
    pagina VARCHAR(20),
    completada TINYINT(1) DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE,
    FOREIGN KEY (materia_id) REFERENCES materias(id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- Tabla: indicadores
DROP TABLE IF EXISTS indicadores;
CREATE TABLE indicadores (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    descripcion TEXT NOT NULL,
    materia_id INT,
    grado VARCHAR(20) DEFAULT '3er',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE,
    FOREIGN KEY (materia_id) REFERENCES materias(id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- Tabla: evaluaciones
DROP TABLE IF EXISTS evaluaciones;
CREATE TABLE evaluaciones (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    nombre VARCHAR(255) NOT NULL,
    fecha DATE NOT NULL,
    curso_id INT,
    materia_id INT,
    periodo VARCHAR(50),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE,
    FOREIGN KEY (curso_id) REFERENCES cursos(id) ON DELETE SET NULL,
    FOREIGN KEY (materia_id) REFERENCES materias(id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- Tabla pivote: evaluaciones-indicadores
DROP TABLE IF EXISTS evaluacion_indicador;
CREATE TABLE evaluacion_indicador (
    id INT AUTO_INCREMENT PRIMARY KEY,
    evaluacion_id INT NOT NULL,
    indicador_id INT NOT NULL,
    FOREIGN KEY (evaluacion_id) REFERENCES evaluaciones(id) ON DELETE CASCADE,
    FOREIGN KEY (indicador_id) REFERENCES indicadores(id) ON DELETE CASCADE,
    UNIQUE KEY unique_eval_ind (evaluacion_id, indicador_id)
) ENGINE=InnoDB;

-- Tabla: resultados
DROP TABLE IF EXISTS resultados;
CREATE TABLE resultados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    alumno_id INT NOT NULL,
    evaluacion_id INT NOT NULL,
    indicador_id INT NOT NULL,
    nivel_logro VARCHAR(10) DEFAULT 'NE',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (alumno_id) REFERENCES alumnos(id) ON DELETE CASCADE,
    FOREIGN KEY (evaluacion_id) REFERENCES evaluaciones(id) ON DELETE CASCADE,
    FOREIGN KEY (indicador_id) REFERENCES indicadores(id) ON DELETE CASCADE,
    UNIQUE KEY unique_result (alumno_id, evaluacion_id, indicador_id)
) ENGINE=InnoDB;

-- Tabla: asistencia
DROP TABLE IF EXISTS asistencia;
CREATE TABLE asistencia (
    id INT AUTO_INCREMENT PRIMARY KEY,
    alumno_id INT NOT NULL,
    curso_id INT NOT NULL,
    fecha DATE NOT NULL,
    presente TINYINT(1) DEFAULT 1,
    falta TINYINT(1) DEFAULT 0,
    tardanza TINYINT(1) DEFAULT 0,
    justificacion TEXT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (alumno_id) REFERENCES alumnos(id) ON DELETE CASCADE,
    FOREIGN KEY (curso_id) REFERENCES cursos(id) ON DELETE CASCADE,
    UNIQUE KEY unique_asistencia (alumno_id, fecha)
) ENGINE=InnoDB;

-- Tabla: calendario
DROP TABLE IF EXISTS calendario;
CREATE TABLE calendario (
    id INT AUTO_INCREMENT PRIMARY KEY,
    unidad_id INT NOT NULL,
    titulo VARCHAR(255) NOT NULL,
    descripcion TEXT,
    fecha DATE NOT NULL,
    tipo VARCHAR(50) DEFAULT 'evento',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (unidad_id) REFERENCES unidades(id) ON DELETE CASCADE
) ENGINE=InnoDB;

SET FOREIGN_KEY_CHECKS = 1;

-- =============================================
-- USUARIO DEMO
-- =============================================
-- Password: admin123
INSERT INTO unidades (nombre, codigo, director) VALUES ('Unidad Educativa Demo', 'DEMO-001', 'Director/a');
INSERT INTO usuarios (nombre, email, password, rol, unidad_id) VALUES ('Administrador', 'admin@test.com', '$2a$10$XQxBtLbKYqXhTqHqKqKqK.ZqKqKqKqKqKqKqKqKqKqKqKqKqKqKqK', 'admin', 1);
