-- ═══════════════════════════════════════════════════════════════════════
-- 2026-10-26_04 · Supervisión: supervisor general, supervisores y evidencias
-- ═══════════════════════════════════════════════════════════════════════
-- Pedido del usuario: lista de proyectos con su estado y supervisor; un
-- supervisor general (permiso especial supervisor_general) ve todos y asigna
-- los proyectos aprobados a los supervisores (asignar = iniciar); cada
-- supervisor ve solo los suyos. Cada tarea lleva comentarios con fotografías
-- o archivos que corroboran el avance (storage/supervision/{proyecto}/).
-- proyecto_supervision.id_responsable pasa a ser "el supervisor".
--
-- Respaldo: backups/tinsa_db_pre-supervision-seguimiento_2026-10-26.sql
-- Reversa:  database/rollback/2026-10-26_04_supervision_seguimiento.down.sql
-- ═══════════════════════════════════════════════════════════════════════

USE tinsa_db;

INSERT INTO rol_permiso_especial (id_rol, clave) VALUES (1, 'supervisor_general');

ALTER TABLE proyecto_supervision
  MODIFY id_responsable INT UNSIGNED DEFAULT NULL COMMENT 'supervisor asignado: solo él y el supervisor general ven el proyecto',
  ADD COLUMN id_usuario_asigno INT UNSIGNED DEFAULT NULL AFTER id_responsable,
  ADD COLUMN fecha_asignacion DATETIME DEFAULT NULL AFTER id_usuario_asigno,
  ADD KEY fk_proyecto_supervision_asigno (id_usuario_asigno),
  ADD CONSTRAINT fk_proyecto_supervision_asigno FOREIGN KEY (id_usuario_asigno) REFERENCES usuarios (id_usuario) ON DELETE SET NULL ON UPDATE CASCADE;

CREATE TABLE proyecto_tarea_comentario (
  id          INT UNSIGNED NOT NULL AUTO_INCREMENT,
  id_tarea    INT UNSIGNED NOT NULL,
  id_usuario  INT UNSIGNED DEFAULT NULL,
  texto       TEXT DEFAULT NULL COMMENT 'puede ir vacío si solo se suben archivos',
  created_at  TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY fk_tarea_comentario_tarea (id_tarea),
  KEY fk_tarea_comentario_usuario (id_usuario),
  CONSTRAINT fk_tarea_comentario_tarea FOREIGN KEY (id_tarea) REFERENCES proyecto_tarea (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_tarea_comentario_usuario FOREIGN KEY (id_usuario) REFERENCES usuarios (id_usuario) ON DELETE SET NULL ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Seguimiento de cada tarea: comentarios con evidencias';

CREATE TABLE proyecto_tarea_archivo (
  id              INT UNSIGNED NOT NULL AUTO_INCREMENT,
  id_comentario   INT UNSIGNED NOT NULL,
  id_tarea        INT UNSIGNED NOT NULL,
  tipo            ENUM('imagen','documento','cad','otro') NOT NULL DEFAULT 'documento',
  nombre_original VARCHAR(255) NOT NULL,
  archivo         VARCHAR(255) NOT NULL COMMENT 'nombre guardado en storage/supervision/{proyecto}/',
  mime            VARCHAR(120) DEFAULT NULL,
  tamano          INT UNSIGNED NOT NULL DEFAULT 0,
  created_at      TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY fk_tarea_archivo_comentario (id_comentario),
  KEY fk_tarea_archivo_tarea (id_tarea),
  CONSTRAINT fk_tarea_archivo_comentario FOREIGN KEY (id_comentario) REFERENCES proyecto_tarea_comentario (id) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT fk_tarea_archivo_tarea FOREIGN KEY (id_tarea) REFERENCES proyecto_tarea (id) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Fotografías y archivos que corroboran una tarea';
