USE akrcsist_bd0003_2026;

ALTER TABLE mon_monitoreo
    ADD COLUMN momento_monitoreo ENUM('DIAGNOSTICO','PROCESO','CIERRE') NOT NULL DEFAULT 'DIAGNOSTICO' AFTER id_monitor_usuario,
    ADD COLUMN acciones_mejora TEXT NULL AFTER aspectos_mejora,
    ADD COLUMN recomendaciones_directivas TEXT NULL AFTER pasos_seguir,
    ADD COLUMN fecha_seguimiento DATE NULL AFTER recomendaciones_directivas,
    ADD INDEX idx_monitoreo_momento (momento_monitoreo, fecha);

UPDATE mon_instrumento
SET nombre = 'Ficha de monitoreo de la planificación curricular de docentes',
    descripcion = 'Instrumento 1: revisión técnica de planificación anual, unidad didáctica/proyecto y sesión de aprendizaje.'
WHERE codigo = 'PLANIFICACION';

UPDATE mon_instrumento
SET nombre = 'Ficha de monitoreo del desempeño docente en el aula',
    descripcion = 'Instrumento 2: observación de aula mediante rúbricas de desempeño docente.'
WHERE codigo = 'DESEMPENO_AULA';

DROP VIEW IF EXISTS vw_monitoreo_consolidado_fases;
DROP VIEW IF EXISTS vw_monitoreo_balance_dimension;
DROP VIEW IF EXISTS vw_monitoreo_balance_docente;
DROP VIEW IF EXISTS vw_monitoreo_docente;

CREATE VIEW vw_monitoreo_docente AS
SELECT
    m.id_monitoreo,
    m.fecha,
    m.momento_monitoreo,
    CASE m.momento_monitoreo
        WHEN 'DIAGNOSTICO' THEN 'Monitoreo Diagnóstico'
        WHEN 'PROCESO' THEN 'Monitoreo de Proceso'
        WHEN 'CIERRE' THEN 'Monitoreo de Salida o Cierre'
        ELSE m.momento_monitoreo
    END AS momento_label,
    m.estado,
    m.dre,
    m.ugel,
    m.institucion_codigo,
    m.institucion_nombre,
    m.id_docente,
    p.numero_documento AS dni,
    COALESCE(NULLIF(p.nombre_completo, ''), TRIM(CONCAT_WS(' ', p.apellido_paterno, p.apellido_materno, p.nombres))) AS docente,
    COALESCE(NULLIF(m.docente_celular, ''), p.celular) AS docente_celular,
    m.monitor_nombre,
    m.monitor_dni,
    i.codigo AS instrumento_codigo,
    i.nombre AS instrumento,
    ne.descripcion AS nivel,
    g.nombre_corto AS grado,
    s.nombre_corto AS seccion,
    m.id_area,
    COALESCE(a.nombre, m.area_curricular) AS area_curricular,
    m.id_competencia,
    c.descripcion AS competencia,
    m.tema,
    m.proposito_sesion,
    m.puntaje_total,
    m.puntaje_maximo,
    m.porcentaje_logro,
    m.nivel_global,
    m.fortalezas,
    m.aspectos_mejora,
    m.acciones_mejora,
    m.compromisos_docente,
    m.pasos_seguir,
    m.recomendaciones_directivas,
    m.fecha_seguimiento,
    m.observaciones
FROM mon_monitoreo m
INNER JOIN mon_instrumento i ON i.id_instrumento = m.id_instrumento
INNER JOIN docente d ON d.id_docente = m.id_docente
INNER JOIN persona p ON p.id_persona = d.id_persona
LEFT JOIN nivel_educativo ne ON ne.id_nivel = m.id_nivel
LEFT JOIN grado g ON g.id_grado = m.id_grado
LEFT JOIN seccion s ON s.id_seccion = m.id_seccion
LEFT JOIN area_curricular a ON a.id_area = m.id_area
LEFT JOIN competencia c ON c.id_competencia = m.id_competencia;

CREATE VIEW vw_monitoreo_balance_docente AS
SELECT
    v.id_docente,
    v.dni,
    v.docente,
    COUNT(*) AS total_monitoreos,
    SUM(CASE WHEN v.estado = 'CERRADO' THEN 1 ELSE 0 END) AS monitoreos_cerrados,
    SUM(CASE WHEN v.momento_monitoreo = 'DIAGNOSTICO' THEN 1 ELSE 0 END) AS total_diagnostico,
    SUM(CASE WHEN v.momento_monitoreo = 'PROCESO' THEN 1 ELSE 0 END) AS total_proceso,
    SUM(CASE WHEN v.momento_monitoreo = 'CIERRE' THEN 1 ELSE 0 END) AS total_cierre,
    ROUND(AVG(CASE WHEN v.estado = 'CERRADO' THEN v.porcentaje_logro ELSE NULL END), 2) AS promedio_logro,
    MIN(CASE WHEN v.estado = 'CERRADO' THEN v.porcentaje_logro ELSE NULL END) AS logro_minimo,
    MAX(CASE WHEN v.estado = 'CERRADO' THEN v.porcentaje_logro ELSE NULL END) AS logro_maximo,
    MAX(v.fecha) AS ultimo_monitoreo
FROM vw_monitoreo_docente v
GROUP BY v.id_docente, v.dni, v.docente;

CREATE VIEW vw_monitoreo_balance_dimension AS
SELECT
    m.id_docente,
    p.numero_documento AS dni,
    COALESCE(NULLIF(p.nombre_completo, ''), TRIM(CONCAT_WS(' ', p.apellido_paterno, p.apellido_materno, p.nombres))) AS docente,
    m.momento_monitoreo,
    i.codigo AS instrumento_codigo,
    i.nombre AS instrumento,
    dim.codigo AS dimension_codigo,
    dim.nombre AS dimension,
    COUNT(DISTINCT m.id_monitoreo) AS monitoreos,
    ROUND(AVG(
        CASE ind.tipo_respuesta
            WHEN 'NIVEL' THEN (r.puntaje / 4) * 100
            ELSE r.puntaje * 100
        END
    ), 2) AS promedio_dimension
FROM mon_respuesta r
INNER JOIN mon_indicador ind ON ind.id_indicador = r.id_indicador
INNER JOIN mon_dimension dim ON dim.id_dimension = ind.id_dimension
INNER JOIN mon_instrumento i ON i.id_instrumento = dim.id_instrumento
INNER JOIN mon_monitoreo m ON m.id_monitoreo = r.id_monitoreo
INNER JOIN docente d ON d.id_docente = m.id_docente
INNER JOIN persona p ON p.id_persona = d.id_persona
WHERE m.estado = 'CERRADO'
GROUP BY
    m.id_docente,
    p.numero_documento,
    COALESCE(NULLIF(p.nombre_completo, ''), TRIM(CONCAT_WS(' ', p.apellido_paterno, p.apellido_materno, p.nombres))),
    m.momento_monitoreo,
    i.codigo,
    i.nombre,
    dim.codigo,
    dim.nombre,
    dim.orden;

CREATE VIEW vw_monitoreo_consolidado_fases AS
SELECT
    v.id_docente,
    v.dni,
    v.docente,
    v.instrumento_codigo,
    v.instrumento,
    COUNT(*) AS total_monitoreos,
    ROUND(AVG(CASE WHEN v.momento_monitoreo = 'DIAGNOSTICO' AND v.estado = 'CERRADO' THEN v.porcentaje_logro END), 2) AS diagnostico,
    ROUND(AVG(CASE WHEN v.momento_monitoreo = 'PROCESO' AND v.estado = 'CERRADO' THEN v.porcentaje_logro END), 2) AS proceso,
    ROUND(AVG(CASE WHEN v.momento_monitoreo = 'CIERRE' AND v.estado = 'CERRADO' THEN v.porcentaje_logro END), 2) AS cierre,
    ROUND(
        COALESCE(AVG(CASE WHEN v.momento_monitoreo = 'CIERRE' AND v.estado = 'CERRADO' THEN v.porcentaje_logro END), 0)
        - COALESCE(AVG(CASE WHEN v.momento_monitoreo = 'DIAGNOSTICO' AND v.estado = 'CERRADO' THEN v.porcentaje_logro END), 0),
        2
    ) AS avance_pp,
    MAX(v.fecha) AS ultimo_monitoreo
FROM vw_monitoreo_docente v
GROUP BY v.id_docente, v.dni, v.docente, v.instrumento_codigo, v.instrumento;

