-- Ajusta los niveles simulados del INSTRUMENTO 2 generado desde Unidad 3.
-- Alcance: solo fichas automaticas con marcador AUTO_I2_U3_.
-- Regla solicitada:
--   Item 1, 2 y 3 -> nivel 2.
--   Item 4 y 5 -> variar entre nivel 2 y 3.

START TRANSACTION;

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_niveles;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_niveles ENGINE=InnoDB AS
SELECT mm.id_monitoreo, 'D1' AS desempeno_codigo, 'D01' AS indicador_codigo, 2 AS nivel
FROM mon_monitoreo mm
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%'
UNION ALL
SELECT mm.id_monitoreo, 'D2', 'D02', 2
FROM mon_monitoreo mm
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%'
UNION ALL
SELECT mm.id_monitoreo, 'D3', 'D03', 2
FROM mon_monitoreo mm
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%'
UNION ALL
SELECT mm.id_monitoreo, 'D4', 'D04',
       CASE WHEN MOD(mm.id_monitoreo, 2) = 0 THEN 3 ELSE 2 END
FROM mon_monitoreo mm
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%'
UNION ALL
SELECT mm.id_monitoreo, 'D5', 'D05',
       CASE WHEN MOD(mm.id_monitoreo, 3) = 0 THEN 3 ELSE 2 END
FROM mon_monitoreo mm
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%';

UPDATE mon_observacion_desempeno_valoracion v
INNER JOIN mon_observacion_aula oa ON oa.id_observacion = v.id_observacion
INNER JOIN tmp_mon_i2_u3_niveles n
    ON n.id_monitoreo = oa.id_monitoreo
   AND n.desempeno_codigo COLLATE utf8mb4_unicode_ci = v.desempeno_codigo COLLATE utf8mb4_unicode_ci
SET v.nivel_logro = n.nivel,
    v.sustento_valoracion = CONCAT(
        'Nivel ajustado para simulacion diagnostica de Unidad 3. Item ',
        SUBSTRING(n.desempeno_codigo, 2),
        ' ubicado en nivel ',
        n.nivel,
        '.'
    ),
    v.actualizado_en = NOW();

UPDATE 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 ins ON ins.id_instrumento = dim.id_instrumento
INNER JOIN tmp_mon_i2_u3_niveles n
    ON n.id_monitoreo = r.id_monitoreo
   AND n.indicador_codigo COLLATE utf8mb4_unicode_ci = ind.codigo COLLATE utf8mb4_unicode_ci
SET r.respuesta = CAST(n.nivel AS CHAR),
    r.puntaje = n.nivel,
    r.marca_alerta = CASE WHEN n.nivel <= 2 THEN 1 ELSE 0 END,
    r.comentario = CONCAT(
        'Nivel ajustado para monitoreo diagnostico de Unidad 3: item ',
        SUBSTRING(n.indicador_codigo, 2),
        ' en nivel ',
        n.nivel,
        '.'
    )
WHERE ins.codigo = 'DESEMPENO_AULA';

DROP TEMPORARY TABLE IF EXISTS tmp_mon_i2_u3_totales;
CREATE TEMPORARY TABLE tmp_mon_i2_u3_totales ENGINE=InnoDB AS
SELECT
    id_monitoreo,
    SUM(nivel) AS puntaje_total,
    ROUND((SUM(nivel) / 20) * 100, 2) AS porcentaje_logro
FROM tmp_mon_i2_u3_niveles
GROUP BY id_monitoreo;

UPDATE mon_monitoreo mm
INNER JOIN tmp_mon_i2_u3_totales t ON t.id_monitoreo = mm.id_monitoreo
SET mm.puntaje_total = t.puntaje_total,
    mm.puntaje_maximo = 20.00,
    mm.porcentaje_logro = t.porcentaje_logro,
    mm.nivel_global = CASE
        WHEN t.porcentaje_logro >= 85 THEN 'Destacado'
        WHEN t.porcentaje_logro >= 70 THEN 'Logrado'
        WHEN t.porcentaje_logro >= 50 THEN 'En proceso'
        ELSE 'En inicio'
    END,
    mm.aspectos_mejora = CONCAT(
        'Ajuste diagnostico Unidad 3: items 1, 2 y 3 en nivel 2; items 4 y 5 entre nivel 2 y 3. Puntaje recalculado: ',
        t.puntaje_total,
        '/20.'
    ),
    mm.actualizado_en = NOW()
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%';

COMMIT;

SELECT
    mm.id_monitoreo,
    p.numero_documento AS dni,
    p.nombre_completo AS docente,
    GROUP_CONCAT(CONCAT(n.desempeno_codigo, '=', n.nivel) ORDER BY n.desempeno_codigo SEPARATOR ', ') AS niveles,
    mm.puntaje_total,
    mm.porcentaje_logro,
    mm.nivel_global
FROM mon_monitoreo mm
INNER JOIN docente d ON d.id_docente = mm.id_docente
INNER JOIN persona p ON p.id_persona = d.id_persona
INNER JOIN tmp_mon_i2_u3_niveles n ON n.id_monitoreo = mm.id_monitoreo
WHERE mm.observaciones COLLATE utf8mb4_unicode_ci LIKE 'AUTO_I2_U3_%'
GROUP BY mm.id_monitoreo, p.numero_documento, p.nombre_completo, mm.puntaje_total, mm.porcentaje_logro, mm.nivel_global
ORDER BY p.nombre_completo;
