-- CreateTable
CREATE TABLE `alumnos` (
    `correo` VARCHAR(50) NOT NULL,
    `nombre` VARCHAR(30) NOT NULL,
    `apellido` VARCHAR(30) NOT NULL,
    `nivel_ingles` ENUM('A1', 'A2', 'B1', 'B1+', 'B2', 'C1', 'C2') NOT NULL,
    `grados_grupos_id` INTEGER NOT NULL,

    INDEX `Alumnos_grados_grupos_id_fkey`(`grados_grupos_id`),
    PRIMARY KEY (`correo`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `clases` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `materia_id` INTEGER NOT NULL,
    `trabajador_correo` VARCHAR(50) NOT NULL,
    `grado_grupo_id` INTEGER NOT NULL,

    INDEX `Clases_grado_grupo_id_fkey`(`grado_grupo_id`),
    INDEX `Clases_materia_id_fkey`(`materia_id`),
    INDEX `Clases_trabajador_correo_fkey`(`trabajador_correo`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `departamentos` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `nombre` VARCHAR(30) NOT NULL,
    `tipo` ENUM('general', 'consejo') NOT NULL,
    `url_foto` VARCHAR(255) NOT NULL,
    `evaluado_padres` TINYINT NOT NULL DEFAULT 0,

    UNIQUE INDEX `Departamentos_nombre_key`(`nombre`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `evaluaciones_alumnos` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `alumno_correo` VARCHAR(50) NOT NULL,
    `clase_id` INTEGER NOT NULL,
    `fecha_evaluacion` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `comentario` VARCHAR(250) NULL,

    INDEX `EvaluacionesAlumnos_alumno_correo_idx`(`alumno_correo`),
    INDEX `EvaluacionesAlumnos_clase_id_idx`(`clase_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `evaluaciones_padres` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `departamento_id` INTEGER NOT NULL,
    `alumno_correo` VARCHAR(50) NOT NULL,
    `fecha_evaluacion` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `comentario` VARCHAR(250) NULL,

    INDEX `EvaluacionesPadres_alumno_correo_fkey`(`alumno_correo`),
    INDEX `EvaluacionesPadres_departamento_id_idx`(`departamento_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `evaluaciones_trabajadores` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `evaluator_correo` VARCHAR(50) NOT NULL,
    `target_trabajador` VARCHAR(50) NULL,
    `target_departamento` INTEGER NULL,
    `fecha_evaluacion` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
    `comentario` VARCHAR(250) NULL,

    INDEX `EvaluacionesTrabajadores_evaluator_correo_idx`(`evaluator_correo`),
    INDEX `EvaluacionesTrabajadores_target_departamento_idx`(`target_departamento`),
    INDEX `EvaluacionesTrabajadores_target_trabajador_idx`(`target_trabajador`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `grados_grupos` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `grado` INTEGER NOT NULL,
    `grupo` CHAR(1) NOT NULL,
    `nivel` ENUM('primaria', 'secundaria', 'preparatoria') NOT NULL,

    UNIQUE INDEX `GradosGrupos_grado_grupo_nivel_key`(`grado`, `grupo`, `nivel`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `materias` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `nombre` VARCHAR(30) NOT NULL,

    UNIQUE INDEX `Materias_nombre_key`(`nombre`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `preguntas` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `texto` VARCHAR(255) NOT NULL,
    `audiencia` ENUM('alumno', 'docente', 'coordinador', 'consejo', 'padre') NOT NULL,
    `nivel` ENUM('primaria', 'secundaria', 'preparatoria') NULL,

    UNIQUE INDEX `Preguntas_texto_audiencia_nivel_key`(`texto`, `audiencia`, `nivel`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `preguntas_departamento` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `departamentos_id` INTEGER NOT NULL,
    `secciones_preguntas_id` INTEGER NOT NULL,

    INDEX `PreguntasDepartamento_departamentos_id_fkey`(`departamentos_id`),
    INDEX `PreguntasDepartamento_secciones_preguntas_id_fkey`(`secciones_preguntas_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `respuestas_evaluacion_alumnos` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `evaluacion_id` INTEGER NOT NULL,
    `pregunta_id` INTEGER NOT NULL,
    `puntaje` INTEGER NOT NULL,

    INDEX `RespuestasEvaluacionAlumnos_evaluacion_id_fkey`(`evaluacion_id`),
    INDEX `RespuestasEvaluacionAlumnos_pregunta_id_fkey`(`pregunta_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `respuestas_evaluacion_padres` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `evaluacion_id` INTEGER NOT NULL,
    `pregunta_id` INTEGER NOT NULL,
    `puntaje` INTEGER NOT NULL,

    INDEX `RespuestasEvaluacionPadres_evaluacion_id_fkey`(`evaluacion_id`),
    INDEX `RespuestasEvaluacionPadres_pregunta_id_fkey`(`pregunta_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `respuestas_evaluacion_trabajadores` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `evaluacion_id` INTEGER NOT NULL,
    `pregunta_id` INTEGER NOT NULL,
    `puntaje` INTEGER NOT NULL,

    INDEX `RespuestasEvaluacionTrabajadores_evaluacion_id_fkey`(`evaluacion_id`),
    INDEX `RespuestasEvaluacionTrabajadores_pregunta_id_fkey`(`pregunta_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `roles` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `nombre` VARCHAR(30) NOT NULL,
    `subrol` VARCHAR(30) NULL,

    UNIQUE INDEX `Roles_nombre_subrol_key`(`nombre`, `subrol`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `secciones` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `nombre` VARCHAR(50) NOT NULL,

    UNIQUE INDEX `Secciones_nombre_key`(`nombre`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `secciones_preguntas` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `seccion_id` INTEGER NOT NULL,
    `pregunta_id` INTEGER NOT NULL,

    INDEX `SeccionesPreguntas_pregunta_id_fkey`(`pregunta_id`),
    INDEX `SeccionesPreguntas_seccion_id_fkey`(`seccion_id`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `sistema_accesos` (
    `id` INTEGER NOT NULL AUTO_INCREMENT,
    `tipo` ENUM('alumno', 'trabajador', 'padre') NOT NULL,
    `activo` BOOLEAN NOT NULL DEFAULT false,
    `fecha_modificacion` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),

    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `trabajadores` (
    `correo` VARCHAR(50) NOT NULL,
    `nombre` VARCHAR(30) NOT NULL,
    `apellido` VARCHAR(30) NOT NULL,
    `url_foto` VARCHAR(255) NOT NULL,
    `departamento_id` INTEGER NOT NULL,
    `rol_id` INTEGER NOT NULL,

    INDEX `Trabajadores_departamentoId_fkey`(`departamento_id`),
    INDEX `Trabajadores_rolId_fkey`(`rol_id`),
    PRIMARY KEY (`correo`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `usuarios_sistema` (
    `correo` VARCHAR(50) NOT NULL,
    `nombre` VARCHAR(50) NOT NULL,
    `apellido` VARCHAR(30) NOT NULL,
    `rol` ENUM('admin', 'superadmin') NOT NULL,
    `fecha_creacion` TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),

    UNIQUE INDEX `UsuariosSistema_correo_key`(`correo`),
    PRIMARY KEY (`correo`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- AddForeignKey
ALTER TABLE `alumnos` ADD CONSTRAINT `Alumnos_grados_grupos_id_fkey` FOREIGN KEY (`grados_grupos_id`) REFERENCES `grados_grupos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `clases` ADD CONSTRAINT `Clases_grado_grupo_id_fkey` FOREIGN KEY (`grado_grupo_id`) REFERENCES `grados_grupos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `clases` ADD CONSTRAINT `Clases_materia_id_fkey` FOREIGN KEY (`materia_id`) REFERENCES `materias`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `clases` ADD CONSTRAINT `Clases_trabajador_correo_fkey` FOREIGN KEY (`trabajador_correo`) REFERENCES `trabajadores`(`correo`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_alumnos` ADD CONSTRAINT `EvaluacionesAlumnos_alumno_correo_fkey` FOREIGN KEY (`alumno_correo`) REFERENCES `alumnos`(`correo`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_alumnos` ADD CONSTRAINT `EvaluacionesAlumnos_clase_id_fkey` FOREIGN KEY (`clase_id`) REFERENCES `clases`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_padres` ADD CONSTRAINT `EvaluacionesPadres_alumno_correo_fkey` FOREIGN KEY (`alumno_correo`) REFERENCES `alumnos`(`correo`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_padres` ADD CONSTRAINT `EvaluacionesPadres_departamento_id_fkey` FOREIGN KEY (`departamento_id`) REFERENCES `departamentos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_trabajadores` ADD CONSTRAINT `EvaluacionesTrabajadores_evaluator_correo_fkey` FOREIGN KEY (`evaluator_correo`) REFERENCES `trabajadores`(`correo`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_trabajadores` ADD CONSTRAINT `EvaluacionesTrabajadores_target_departamento_fkey` FOREIGN KEY (`target_departamento`) REFERENCES `departamentos`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `evaluaciones_trabajadores` ADD CONSTRAINT `EvaluacionesTrabajadores_target_trabajador_fkey` FOREIGN KEY (`target_trabajador`) REFERENCES `trabajadores`(`correo`) ON DELETE SET NULL ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `preguntas_departamento` ADD CONSTRAINT `PreguntasDepartamento_departamentos_id_fkey` FOREIGN KEY (`departamentos_id`) REFERENCES `departamentos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `preguntas_departamento` ADD CONSTRAINT `PreguntasDepartamento_secciones_preguntas_id_fkey` FOREIGN KEY (`secciones_preguntas_id`) REFERENCES `secciones_preguntas`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_alumnos` ADD CONSTRAINT `RespuestasEvaluacionAlumnos_evaluacion_id_fkey` FOREIGN KEY (`evaluacion_id`) REFERENCES `evaluaciones_alumnos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_alumnos` ADD CONSTRAINT `RespuestasEvaluacionAlumnos_pregunta_id_fkey` FOREIGN KEY (`pregunta_id`) REFERENCES `preguntas`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_padres` ADD CONSTRAINT `RespuestasEvaluacionPadres_evaluacion_id_fkey` FOREIGN KEY (`evaluacion_id`) REFERENCES `evaluaciones_padres`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_padres` ADD CONSTRAINT `RespuestasEvaluacionPadres_pregunta_id_fkey` FOREIGN KEY (`pregunta_id`) REFERENCES `preguntas`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_trabajadores` ADD CONSTRAINT `RespuestasEvaluacionTrabajadores_evaluacion_id_fkey` FOREIGN KEY (`evaluacion_id`) REFERENCES `evaluaciones_trabajadores`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `respuestas_evaluacion_trabajadores` ADD CONSTRAINT `RespuestasEvaluacionTrabajadores_pregunta_id_fkey` FOREIGN KEY (`pregunta_id`) REFERENCES `preguntas`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `secciones_preguntas` ADD CONSTRAINT `SeccionesPreguntas_pregunta_id_fkey` FOREIGN KEY (`pregunta_id`) REFERENCES `preguntas`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `secciones_preguntas` ADD CONSTRAINT `SeccionesPreguntas_seccion_id_fkey` FOREIGN KEY (`seccion_id`) REFERENCES `secciones`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `trabajadores` ADD CONSTRAINT `Trabajadores_departamentoId_fkey` FOREIGN KEY (`departamento_id`) REFERENCES `departamentos`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `trabajadores` ADD CONSTRAINT `Trabajadores_rolId_fkey` FOREIGN KEY (`rol_id`) REFERENCES `roles`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
