-- ============================================
-- MIGRACIÓN: Crear tabla estados_asistencia
-- Fecha: 09/11/2025
-- Descripción: Sistema de gestión de estados de asistencia configurables
-- ============================================

-- PASO 1: Crear tabla estados_asistencia
CREATE TABLE IF NOT EXISTS `estados_asistencia` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `codigo` VARCHAR(50) NOT NULL UNIQUE COMMENT 'Código único para identificar el estado (ej: PRESENTE, TARDANZA)',
  `nombre` VARCHAR(100) NOT NULL COMMENT 'Nombre descriptivo del estado',
  `descripcion` TEXT NULL COMMENT 'Descripción detallada del estado',
  `color` VARCHAR(20) NOT NULL DEFAULT '#000000' COMMENT 'Color HEX para identificación visual',
  `icono` VARCHAR(50) NULL COMMENT 'Nombre del icono Material-UI',
  `orden` INT NOT NULL DEFAULT 0 COMMENT 'Orden de visualización',
  `es_activo` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=Activo, 0=Inactivo',
  `es_sistema` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '1=No se puede eliminar, 0=Se puede eliminar',
  `afecta_estadisticas` ENUM('PRESENTE', 'AUSENTE', 'NEUTRO') NOT NULL DEFAULT 'NEUTRO' COMMENT 'Cómo afecta a las estadísticas',
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  INDEX `idx_activo` (`es_activo`),
  INDEX `idx_orden` (`orden`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- PASO 2: Insertar estados por defecto (los actuales del sistema)
INSERT INTO `estados_asistencia` (`codigo`, `nombre`, `descripcion`, `color`, `icono`, `orden`, `es_activo`, `es_sistema`, `afecta_estadisticas`) VALUES
('PRESENTE', 'Presente', 'Estudiante asistió a clases normalmente', '#4CAF50', 'CheckCircle', 1, 1, 1, 'PRESENTE'),
('TARDANZA', 'Tardanza', 'Estudiante llegó tarde a clases', '#FF9800', 'Schedule', 2, 1, 1, 'PRESENTE'),
('FALTA_JUSTIFICADA', 'Falta Justificada', 'Estudiante no asistió con justificación válida', '#2196F3', 'Cancel', 3, 1, 1, 'AUSENTE'),
('FALTA_INJUSTIFICADA', 'Falta Injustificada', 'Estudiante no asistió sin justificación', '#F44336', 'Cancel', 4, 1, 1, 'AUSENTE');

-- PASO 3: Agregar columna estado_id a tabla asistencias (opcional para migración futura)
-- Por ahora mantenemos el campo 'descripcion' para compatibilidad
-- En una migración futura se podría cambiar a usar estado_id
ALTER TABLE `asistencias`
  ADD COLUMN `estado_id` INT NULL AFTER `descripcion`,
  ADD FOREIGN KEY `fk_asistencias_estado` (`estado_id`) REFERENCES `estados_asistencia`(`id`) ON DELETE SET NULL;

-- PASO 4: Crear índice en descripcion para búsquedas rápidas
ALTER TABLE `asistencias`
  ADD INDEX `idx_descripcion` (`descripcion`);

-- PASO 5: Actualizar estado_id en registros existentes basándose en descripcion
UPDATE `asistencias` a
INNER JOIN `estados_asistencia` ea ON a.descripcion = ea.codigo
SET a.estado_id = ea.id
WHERE a.estado_id IS NULL;

-- ============================================
-- NOTAS DE IMPLEMENTACIÓN
-- ============================================
-- 1. El campo 'descripcion' se mantiene por compatibilidad
-- 2. El campo 'estado_id' es NULL para permitir migración gradual
-- 3. Los estados del sistema (es_sistema=1) no se pueden eliminar
-- 4. afecta_estadisticas permite clasificar estados para reportes
-- 5. El orden determina cómo se muestran en los selectores

-- ============================================
-- ROLLBACK (en caso de emergencia)
-- ============================================
-- ALTER TABLE `asistencias` DROP FOREIGN KEY `fk_asistencias_estado`;
-- ALTER TABLE `asistencias` DROP COLUMN `estado_id`;
-- DROP TABLE IF EXISTS `estados_asistencia`;
