-- ============================================================
-- Script: sincronizar_estatus_acreditado.sql
-- Descripción: Sincroniza el campo aul_estatus_acreditado en
--              la tabla `aulas` según el estado real de los
--              alumnos activos en `aula_alumnos`.
--              Solo afecta aulas con aul_fecha_inicia en 2026.
--
--   aul_estatus_acreditado = 1  → todos los alumnos activos
--                                  tienen aa_acreditado = 'SI'
--   aul_estatus_acreditado = 0  → al menos uno no acreditado
--
-- Para cambiar el año, reemplaza YEAR(a.aul_fecha_inicia) = 2026
-- por el año deseado en todas las secciones.
--
-- Uso: ejecutar directamente en MySQL o con:
--      mysql -u usuario -p base_de_datos < sincronizar_estatus_acreditado.sql
-- ============================================================

-- --------------------------------------------------------
-- 1. Vista previa: aulas que DEBERÍAN tener el valor 1
--    (para revisar antes de ejecutar el UPDATE)
-- --------------------------------------------------------
SELECT
    a.aul_id,
    a.aul_clave_registro,
    a.aul_fecha_inicia,
    a.aul_estatus_acreditado AS valor_actual,
    1                        AS valor_nuevo,
    COUNT(aa.aa_id)          AS total_alumnos,
    SUM(aa.aa_acreditado = 'SI') AS total_acreditados
FROM aulas a
INNER JOIN aula_alumnos aa
       ON aa.aa_id_aula = a.aul_id
      AND aa.aa_status  = 'A'
WHERE YEAR(a.aul_fecha_inicia) = 2026
GROUP BY a.aul_id, a.aul_clave_registro, a.aul_fecha_inicia, a.aul_estatus_acreditado
HAVING total_alumnos > 0
   AND total_alumnos = total_acreditados
   AND a.aul_estatus_acreditado != 1
ORDER BY a.aul_id;

-- --------------------------------------------------------
-- 2. Vista previa: aulas con valor 1 INCORRECTO (corrección)
-- --------------------------------------------------------
SELECT
    a.aul_id,
    a.aul_clave_registro,
    a.aul_fecha_inicia,
    a.aul_estatus_acreditado AS valor_actual,
    0                        AS valor_nuevo,
    COUNT(aa.aa_id)          AS total_alumnos,
    SUM(aa.aa_acreditado = 'SI') AS total_acreditados
FROM aulas a
INNER JOIN aula_alumnos aa
       ON aa.aa_id_aula = a.aul_id
      AND aa.aa_status  = 'A'
WHERE YEAR(a.aul_fecha_inicia) = 2026
GROUP BY a.aul_id, a.aul_clave_registro, a.aul_fecha_inicia, a.aul_estatus_acreditado
HAVING total_alumnos > 0
   AND total_alumnos != total_acreditados
   AND a.aul_estatus_acreditado = 1
ORDER BY a.aul_id;

-- --------------------------------------------------------
-- 3. UPDATE principal: poner en 1 donde corresponde
-- --------------------------------------------------------
UPDATE aulas a
INNER JOIN (
    SELECT
        aa_id_aula,
        COUNT(*)                      AS total,
        SUM(aa_acreditado = 'SI')     AS acreditados
    FROM aula_alumnos
    WHERE aa_status = 'A'
    GROUP BY aa_id_aula
    HAVING total > 0 AND total = acreditados
) sub ON sub.aa_id_aula = a.aul_id
SET a.aul_estatus_acreditado = 1
WHERE a.aul_estatus_acreditado != 1
  AND YEAR(a.aul_fecha_inicia) = 2026;

-- --------------------------------------------------------
-- 4. UPDATE correctivo: poner en 0 donde el valor es 1
--    pero no todos los alumnos están acreditados
-- --------------------------------------------------------
UPDATE aulas a
INNER JOIN (
    SELECT
        aa_id_aula,
        COUNT(*)                      AS total,
        SUM(aa_acreditado = 'SI')     AS acreditados
    FROM aula_alumnos
    WHERE aa_status = 'A'
    GROUP BY aa_id_aula
    HAVING total > 0 AND total != acreditados
) sub ON sub.aa_id_aula = a.aul_id
SET a.aul_estatus_acreditado = 0
WHERE a.aul_estatus_acreditado = 1
  AND YEAR(a.aul_fecha_inicia) = 2026;

-- --------------------------------------------------------
-- 5. Verificación final
-- --------------------------------------------------------
SELECT
    a.aul_id,
    a.aul_clave_registro,
    a.aul_fecha_inicia,
    a.aul_estatus_acreditado,
    COUNT(aa.aa_id)              AS total_alumnos,
    SUM(aa.aa_acreditado = 'SI') AS total_acreditados
FROM aulas a
LEFT JOIN aula_alumnos aa
       ON aa.aa_id_aula = a.aul_id
      AND aa.aa_status  = 'A'
WHERE YEAR(a.aul_fecha_inicia) = 2026
GROUP BY a.aul_id, a.aul_clave_registro, a.aul_fecha_inicia, a.aul_estatus_acreditado
HAVING aul_estatus_acreditado = 1
ORDER BY a.aul_id;
