-- =====================================================================
-- 02_migracion_datos.sql
-- =====================================================================
-- Copia todos los datos de las 7 tablas viejas hacia `actividades` +
-- `actividad_seguimiento`. Es una COPIA: las tablas viejas
-- (actividades_diarias, actividades_semanales, etc.) NO se tocan ni se
-- borran aquí. Puedes correr este script, revisar que todo cuadre con
-- las consultas de verificación al final, y si algo no te convence,
-- simplemente truncas actividades/actividad_seguimiento y no pasó nada
-- (las tablas originales siguen intactas).
--
-- Los IDs se conservan pero con un "offset" distinto por tipo, para
-- que no choquen entre sí (por ejemplo, una actividad diaria con id=5
-- y una semanal con id=5 ya no pueden pisarse):
--   DIARIA         id original + 0
--   SEMANAL        id original + 100000
--   MENSUAL        id original + 200000
--   TRIMESTRAL     id original + 300000
--   COMPROMISO     id original + 400000
--   ENTRENAMIENTO  id original + 500000
--   LIDERAZGO      id original + 600000
-- (el id más alto real hoy es 52,378 en diarias, así que hay margen de
-- sobra en cada rango).
--
-- Requiere haber corrido antes 01_schema_nuevo.sql.
-- =====================================================================

START TRANSACTION;

-- ---------------------------------------------------------------------
-- DIARIA
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, dia_o_mes, hora_actividad, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesDiarias,
    'DIARIA',
    YEARWEEK(fecha_formulario, 3) DIV 100,
    LPAD(YEARWEEK(fecha_formulario, 3) MOD 100, 2, '0'),
    fecha_formulario,
    NULL,
    area_nombre,
    TRIM(actividad_diaria),
    NULL,
    hora_actividad,
    COALESCE(NULLIF(TRIM(status), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_diarias;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota, vacacion, cubierto_por)
SELECT id_actividadesDiarias, 'lunes',
       COALESCE(NULLIF(TRIM(lunes), ''), 'NO REALIZADO'), NULLIF(TRIM(lunesNota), ''),
       COALESCE(vacLunes, 0), COALESCE(NULLIF(TRIM(backup_lunes), ''), NULLIF(TRIM(backup), ''))
FROM actividades_diarias
UNION ALL
SELECT id_actividadesDiarias, 'martes',
       COALESCE(NULLIF(TRIM(martes), ''), 'NO REALIZADO'), NULLIF(TRIM(martesNota), ''),
       COALESCE(vacMartes, 0), COALESCE(NULLIF(TRIM(backup_martes), ''), NULLIF(TRIM(backup), ''))
FROM actividades_diarias
UNION ALL
SELECT id_actividadesDiarias, 'miercoles',
       COALESCE(NULLIF(TRIM(miercoles), ''), 'NO REALIZADO'), NULLIF(TRIM(miercolesNota), ''),
       COALESCE(vacMiercoles, 0), COALESCE(NULLIF(TRIM(backup_miercoles), ''), NULLIF(TRIM(backup), ''))
FROM actividades_diarias
UNION ALL
SELECT id_actividadesDiarias, 'jueves',
       COALESCE(NULLIF(TRIM(jueves), ''), 'NO REALIZADO'), NULLIF(TRIM(juevesNota), ''),
       COALESCE(vacJueves, 0), COALESCE(NULLIF(TRIM(backup_jueves), ''), NULLIF(TRIM(backup), ''))
FROM actividades_diarias
UNION ALL
SELECT id_actividadesDiarias, 'viernes',
       COALESCE(NULLIF(TRIM(viernes), ''), 'NO REALIZADO'), NULLIF(TRIM(viernesNota), ''),
       COALESCE(vacViernes, 0), COALESCE(NULLIF(TRIM(backup_viernes), ''), NULLIF(TRIM(backup), ''))
FROM actividades_diarias;

-- ---------------------------------------------------------------------
-- SEMANAL
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, dia_o_mes, hora_actividad, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesSemanales + 100000,
    'SEMANAL',
    YEARWEEK(fecha_formulario, 3) DIV 100,
    LPAD(YEARWEEK(fecha_formulario, 3) MOD 100, 2, '0'),
    fecha_formulario,
    NULL,
    area_nombre,
    TRIM(actividad_semanal),
    NULLIF(TRIM(dia_actividad), ''),
    NULL,
    COALESCE(NULLIF(TRIM(status), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_semanales;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesSemanales + 100000, 'semana1',
       COALESCE(NULLIF(TRIM(semana1), ''), 'NO REALIZADO'), NULLIF(TRIM(notaSemana1), '')
FROM actividades_semanales
UNION ALL
SELECT id_actividadesSemanales + 100000, 'semana2',
       COALESCE(NULLIF(TRIM(semana2), ''), 'NO REALIZADO'), NULLIF(TRIM(notaSemana2), '')
FROM actividades_semanales
UNION ALL
SELECT id_actividadesSemanales + 100000, 'semana3',
       COALESCE(NULLIF(TRIM(semana3), ''), 'NO REALIZADO'), NULLIF(TRIM(notaSemana3), '')
FROM actividades_semanales
UNION ALL
SELECT id_actividadesSemanales + 100000, 'semana4',
       COALESCE(NULLIF(TRIM(semana4), ''), 'NO REALIZADO'), NULLIF(TRIM(notaSemana4), '')
FROM actividades_semanales;

-- ---------------------------------------------------------------------
-- MENSUAL
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, dia_o_mes, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesMensuales + 200000,
    'MENSUAL',
    YEAR(fecha_formulario),
    LPAD(MONTH(fecha_formulario), 2, '0'),
    fecha_formulario,
    CAST(fecha_actividad AS CHAR),
    area_nombre,
    TRIM(actividad_mensual),
    NULLIF(TRIM(semana_actividad), ''),
    COALESCE(NULLIF(TRIM(estado), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_mensuales;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesMensuales + 200000, 'unico',
       COALESCE(NULLIF(TRIM(status), ''), 'NO REALIZADO'), NULLIF(TRIM(notaStatus), '')
FROM actividades_mensuales;

-- ---------------------------------------------------------------------
-- TRIMESTRAL
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, dia_o_mes, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesTrimestrales + 300000,
    'TRIMESTRAL',
    YEAR(fecha_formulario),
    CONCAT('Q', QUARTER(fecha_formulario)),
    fecha_formulario,
    NULLIF(TRIM(fecha_actividad), ''),
    area_nombre,
    TRIM(actividad_trimestral),
    NULLIF(TRIM(mes_actividad), ''),
    COALESCE(NULLIF(TRIM(estado), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_trimestrales;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesTrimestrales + 300000, 'unico',
       COALESCE(NULLIF(TRIM(status), ''), 'NO REALIZADO'), NULLIF(TRIM(notaStatus), '')
FROM actividades_trimestrales;

-- ---------------------------------------------------------------------
-- COMPROMISO
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesCompromisos + 400000,
    'COMPROMISO',
    YEARWEEK(fecha_formulario, 3) DIV 100,
    LPAD(YEARWEEK(fecha_formulario, 3) MOD 100, 2, '0'),
    fecha_formulario,
    CAST(fecha_actividad AS CHAR),
    area_nombre,
    TRIM(actividad_compromisos),
    COALESCE(NULLIF(TRIM(estado), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_compromisos;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesCompromisos + 400000, 'unico',
       COALESCE(NULLIF(TRIM(status), ''), 'NO REALIZADO'), NULLIF(TRIM(notaStatus), '')
FROM actividades_compromisos;

-- ---------------------------------------------------------------------
-- ENTRENAMIENTO
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesEntrenamiento + 500000,
    'ENTRENAMIENTO',
    YEARWEEK(fecha_formulario, 3) DIV 100,
    LPAD(YEARWEEK(fecha_formulario, 3) MOD 100, 2, '0'),
    fecha_formulario,
    CAST(fecha_actividad AS CHAR),
    area_nombre,
    TRIM(actividad_entrenamiento),
    COALESCE(NULLIF(TRIM(estado), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_entrenamientos;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesEntrenamiento + 500000, 'unico',
       COALESCE(NULLIF(TRIM(status), ''), 'NO REALIZADO'), NULLIF(TRIM(notaStatus), '')
FROM actividades_entrenamientos;

-- ---------------------------------------------------------------------
-- LIDERAZGO
-- ---------------------------------------------------------------------
INSERT INTO actividades
    (id_actividad, tipo, anio, periodo, fecha_formulario, fecha_objetivo,
     area_nombre, descripcion, dia_o_mes, status,
     usuario_id, asignada_por, prioridad)
SELECT
    id_actividadesLiderazgo + 600000,
    'LIDERAZGO',
    YEARWEEK(fecha_formulario, 3) DIV 100,
    LPAD(YEARWEEK(fecha_formulario, 3) MOD 100, 2, '0'),
    fecha_formulario,
    CAST(fecha_actividad AS CHAR),
    area_nombre,
    TRIM(actividad_liderazgo),
    NULLIF(TRIM(dia_actividad), ''),
    COALESCE(NULLIF(TRIM(estado), ''), 'ACTIVO'),
    TRIM(usuario_id),
    NULLIF(TRIM(asignada_por), ''),
    COALESCE(NULLIF(UPPER(TRIM(prioridad)), ''), 'BAJA')
FROM actividades_liderazgo;

INSERT INTO actividad_seguimiento (id_actividad, clave, valor, nota)
SELECT id_actividadesLiderazgo + 600000, 'unico',
       COALESCE(NULLIF(TRIM(status), ''), 'NO REALIZADO'), NULLIF(TRIM(notaStatus), '')
FROM actividades_liderazgo;

-- ---------------------------------------------------------------------
-- notas_semanales: rellenar el año a partir de fecha_formulario para
-- las notas que ya existían (no se toca nota_semanal ni semana_formulario,
-- solo se agrega el dato que faltaba).
-- ---------------------------------------------------------------------
UPDATE notas_semanales
SET anio = YEAR(fecha_formulario)
WHERE anio IS NULL;

COMMIT;

-- =====================================================================
-- VERIFICACIÓN -- corre esto después y compara contra las tablas viejas
-- =====================================================================
SELECT 'actividades (nueva)' AS tabla, COUNT(*) AS filas FROM actividades
UNION ALL
SELECT 'suma de las 7 tablas viejas',
       (SELECT COUNT(*) FROM actividades_diarias)
     + (SELECT COUNT(*) FROM actividades_semanales)
     + (SELECT COUNT(*) FROM actividades_mensuales)
     + (SELECT COUNT(*) FROM actividades_trimestrales)
     + (SELECT COUNT(*) FROM actividades_compromisos)
     + (SELECT COUNT(*) FROM actividades_entrenamientos)
     + (SELECT COUNT(*) FROM actividades_liderazgo);

SELECT 'actividad_seguimiento (nueva)' AS tabla, COUNT(*) AS filas FROM actividad_seguimiento
UNION ALL
SELECT 'esperado (diarias*5 + semanales*4 + resto*1)',
       (SELECT COUNT(*) * 5 FROM actividades_diarias)
     + (SELECT COUNT(*) * 4 FROM actividades_semanales)
     + (SELECT COUNT(*) FROM actividades_mensuales)
     + (SELECT COUNT(*) FROM actividades_trimestrales)
     + (SELECT COUNT(*) FROM actividades_compromisos)
     + (SELECT COUNT(*) FROM actividades_entrenamientos)
     + (SELECT COUNT(*) FROM actividades_liderazgo);
