-- =============================================================================
-- 02_alter_migraciones.sql — Actualizar una base ya creada con init_db.php antiguo
-- NO ejecute esto en una base nueva si ya corrió 01_estructura_y_datos.sql completo.
-- Revise cada bloque: si la columna/índice ya existe, omita esa sentencia o ignore el error.
-- Equivale a: migrate_proyectos + migrate_trabajador_dni_global + migrate_users_admin
--            + migrate_trabajador_modificaciones_historial (ver src/migrate_*.php).
-- =============================================================================


-- ---------------------------------------------------------------------------
-- 1) Proyectos + columna proyecto_id en trabajadores/asistencias (migrate_proyectos)
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `proyectos` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `nombre` VARCHAR(150) NOT NULL,
  `codigo` VARCHAR(40) NULL DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY `uq_proyecto_codigo` (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `proyectos` (`nombre`, `codigo`)
SELECT 'Obra general', 'GEN-01'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM `proyectos` WHERE `codigo` = 'GEN-01' LIMIT 1);

-- Si trabajadores no tiene proyecto_id, descomente y ajuste @default_pid al id del primer proyecto:
-- SET @default_pid := (SELECT MIN(id) FROM proyectos);
-- ALTER TABLE trabajadores ADD COLUMN proyecto_id INT NULL;
-- UPDATE trabajadores SET proyecto_id = @default_pid WHERE proyecto_id IS NULL;
-- ALTER TABLE trabajadores MODIFY proyecto_id INT NOT NULL;
-- (Eliminar índice único solo en dni si existía, luego:)
-- ALTER TABLE trabajadores ADD UNIQUE KEY uq_trab_dni_proyecto (dni, proyecto_id);
-- ALTER TABLE trabajadores ADD CONSTRAINT fk_trabajador_proyecto FOREIGN KEY (proyecto_id) REFERENCES proyectos(id) ON DELETE RESTRICT;

-- Si asistencias no tiene proyecto_id:
-- ALTER TABLE asistencias ADD COLUMN proyecto_id INT NULL;
-- UPDATE asistencias a INNER JOIN trabajadores t ON t.id = a.trabajador_id SET a.proyecto_id = t.proyecto_id WHERE a.proyecto_id IS NULL;
-- UPDATE asistencias SET proyecto_id = @default_pid WHERE proyecto_id IS NULL;
-- ALTER TABLE asistencias MODIFY proyecto_id INT NOT NULL;
-- ALTER TABLE asistencias ADD CONSTRAINT fk_asistencia_proyecto FOREIGN KEY (proyecto_id) REFERENCES proyectos(id) ON DELETE RESTRICT;
-- CREATE INDEX idx_asistencia_proyecto_fecha ON asistencias (proyecto_id, fecha_hora);

-- ---------------------------------------------------------------------------
-- 2) DNI único global (migrate_trabajador_dni_global)
-- Antes: corrija DNIs duplicados o fallará el índice único.
-- ---------------------------------------------------------------------------

-- ALTER TABLE trabajadores DROP INDEX `uq_trab_dni_proyecto`;
-- ALTER TABLE trabajadores ADD UNIQUE KEY uq_trabajador_dni_global (dni);

-- ---------------------------------------------------------------------------
-- 3) Alcance admin en users (migrate_users_admin)
-- ---------------------------------------------------------------------------

-- ALTER TABLE users ADD COLUMN access_scope ENUM('GLOBAL','PROJECT') NULL DEFAULT NULL AFTER role;
-- ALTER TABLE users ADD COLUMN proyecto_id INT NULL DEFAULT NULL AFTER access_scope;
-- ALTER TABLE users ADD KEY idx_users_proyecto (proyecto_id);
-- ALTER TABLE users ADD CONSTRAINT fk_users_proyectoScope FOREIGN KEY (proyecto_id) REFERENCES proyectos(id) ON DELETE SET NULL;

-- ---------------------------------------------------------------------------
-- 4) Historial de edición de trabajadores (migrate_trabajador_historial)
-- ---------------------------------------------------------------------------

CREATE TABLE IF NOT EXISTS `trabajador_modificaciones_historial` (
  `id` INT AUTO_INCREMENT PRIMARY KEY,
  `trabajador_id` INT NOT NULL,
  `campo` VARCHAR(32) NOT NULL,
  `valor_anterior` TEXT NOT NULL,
  `valor_nuevo` TEXT NOT NULL,
  `usuario_admin_id` INT NULL DEFAULT NULL,
  `usuario_admin_username` VARCHAR(50) NULL DEFAULT NULL,
  `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY `idx_trabajador_modif_trab` (`trabajador_id`),
  CONSTRAINT `fk_trabajador_modif_trab` FOREIGN KEY (`trabajador_id`) REFERENCES `trabajadores` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_trabajador_modif_user` FOREIGN KEY (`usuario_admin_id`) REFERENCES `users` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
