-- Parche puntual 057
-- Corrige la asignacion de DPCC en 4to grado A y B al docente DNI 70692822.
-- Es idempotente: si la asignacion ya existe, solo la activa; no duplica registros.
-- Alcance: docente 70692822, area DPCC secundaria, aulas 4A/4B del anio activo.

SET @anio_activo := (
    SELECT id_anio_lectivo
    FROM anio_lectivo
    WHERE estado = 1
    ORDER BY anio DESC, id_anio_lectivo DESC
    LIMIT 1
);

SET @docente_jonathan := (
    SELECT d.id_docente
    FROM docente d
    INNER JOIN persona p ON p.id_persona = d.id_persona
    WHERE p.numero_documento = '70692822'
      AND d.estado = 1
    ORDER BY d.id_anio_lectivo DESC, d.id_docente DESC
    LIMIT 1
);

SET @persona_jonathan := (
    SELECT p.id_persona
    FROM persona p
    WHERE p.numero_documento = '70692822'
    LIMIT 1
);

SET @docente_anterior := (
    SELECT d.id_docente
    FROM docente d
    INNER JOIN persona p ON p.id_persona = d.id_persona
    WHERE p.numero_documento = '80299178'
      AND d.estado = 1
    ORDER BY d.id_anio_lectivo DESC, d.id_docente DESC
    LIMIT 1
);

SET @area_dpcc := (
    SELECT id_area
    FROM area_curricular
    WHERE id_nivel = 'SEC'
      AND activo = 1
      AND es_transversal = 0
      AND (
            UPPER(TRIM(COALESCE(descripcion, ''))) = 'DPCC'
            OR (
                UPPER(nombre) LIKE '%DESARROLLO PERSONAL%'
                AND UPPER(nombre) LIKE '%VICA%'
            )
      )
    ORDER BY id_area
    LIMIT 1
);

SET @aula_4a := (
    SELECT a.id_aula
    FROM aula a
    INNER JOIN grado g ON g.id_grado = a.id_grado
    INNER JOIN seccion s ON s.id_seccion = a.id_seccion
    WHERE a.id_anio_lectivo = @anio_activo
      AND a.id_nivel = 'SEC'
      AND a.estado = 1
      AND (UPPER(g.descripcion) LIKE 'CUARTO%' OR g.nombre_corto LIKE '4%' OR g.id_grado = 10)
      AND UPPER(s.nombre_corto) = 'A'
    ORDER BY a.id_aula
    LIMIT 1
);

SET @aula_4b := (
    SELECT a.id_aula
    FROM aula a
    INNER JOIN grado g ON g.id_grado = a.id_grado
    INNER JOIN seccion s ON s.id_seccion = a.id_seccion
    WHERE a.id_anio_lectivo = @anio_activo
      AND a.id_nivel = 'SEC'
      AND a.estado = 1
      AND (UPPER(g.descripcion) LIKE 'CUARTO%' OR g.nombre_corto LIKE '4%' OR g.id_grado = 10)
      AND UPPER(s.nombre_corto) = 'B'
    ORDER BY a.id_aula
    LIMIT 1
);

UPDATE usuario_sistema
SET id_docente = @docente_jonathan,
    id_persona = @persona_jonathan,
    rol = 'DOCENTE',
    estado = 1
WHERE usuario = '70692822'
  AND @docente_jonathan IS NOT NULL
  AND @persona_jonathan IS NOT NULL;

UPDATE docente_area_cargo
SET estado = 0,
    actualizado_en = NOW(),
    observaciones = 'DPCC 4A reasignado al docente DNI 70692822 por parche 057.'
WHERE id_docente = @docente_anterior
  AND id_area = @area_dpcc
  AND id_aula = @aula_4a
  AND id_anio_lectivo = @anio_activo
  AND estado = 1
  AND @docente_anterior IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4a IS NOT NULL;

UPDATE docente_area_cargo
SET estado = 0,
    actualizado_en = NOW(),
    observaciones = 'DPCC 4B reasignado al docente DNI 70692822 por parche 057.'
WHERE id_docente = @docente_anterior
  AND id_area = @area_dpcc
  AND id_aula = @aula_4b
  AND id_anio_lectivo = @anio_activo
  AND estado = 1
  AND @docente_anterior IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4b IS NOT NULL;

UPDATE docente_area_cargo
SET estado = 1,
    actualizado_en = NOW(),
    tipo_asignacion = 'MANUAL',
    fuente = 'PARCHE_057_DPCC_4AB',
    observaciones = 'DPCC 4A asignado al docente DNI 70692822 por parche 057.'
WHERE id_docente = @docente_jonathan
  AND id_area = @area_dpcc
  AND id_aula = @aula_4a
  AND id_anio_lectivo = @anio_activo
  AND @docente_jonathan IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4a IS NOT NULL;

UPDATE docente_area_cargo
SET estado = 1,
    actualizado_en = NOW(),
    tipo_asignacion = 'MANUAL',
    fuente = 'PARCHE_057_DPCC_4AB',
    observaciones = 'DPCC 4B asignado al docente DNI 70692822 por parche 057.'
WHERE id_docente = @docente_jonathan
  AND id_area = @area_dpcc
  AND id_aula = @aula_4b
  AND id_anio_lectivo = @anio_activo
  AND @docente_jonathan IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4b IS NOT NULL;

INSERT INTO docente_area_cargo (
    id_docente, id_area, id_aula, id_anio_lectivo,
    horas_semanales, tipo_asignacion, fuente, observaciones, estado
)
SELECT
    @docente_jonathan, @area_dpcc, @aula_4a, @anio_activo,
    NULL, 'MANUAL', 'PARCHE_057_DPCC_4AB',
    'DPCC 4A asignado al docente DNI 70692822 por parche 057.', 1
WHERE @docente_jonathan IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4a IS NOT NULL
  AND NOT EXISTS (
      SELECT 1
      FROM docente_area_cargo
      WHERE id_docente = @docente_jonathan
        AND id_area = @area_dpcc
        AND id_aula = @aula_4a
        AND id_anio_lectivo = @anio_activo
  );

INSERT INTO docente_area_cargo (
    id_docente, id_area, id_aula, id_anio_lectivo,
    horas_semanales, tipo_asignacion, fuente, observaciones, estado
)
SELECT
    @docente_jonathan, @area_dpcc, @aula_4b, @anio_activo,
    NULL, 'MANUAL', 'PARCHE_057_DPCC_4AB',
    'DPCC 4B asignado al docente DNI 70692822 por parche 057.', 1
WHERE @docente_jonathan IS NOT NULL
  AND @area_dpcc IS NOT NULL
  AND @aula_4b IS NOT NULL
  AND NOT EXISTS (
      SELECT 1
      FROM docente_area_cargo
      WHERE id_docente = @docente_jonathan
        AND id_area = @area_dpcc
        AND id_aula = @aula_4b
        AND id_anio_lectivo = @anio_activo
  );
