-- Cierre de temporada de Ancheteria: solo estructura, sin copiar datos locales.
-- Requiere que existan las tablas operativas de Ancheteria.
-- Ejecucion unica en MySQL 8.0.46 (version observada en el respaldo de produccion).
-- Seleccionar la base de datos correcta y sacar respaldo antes de ejecutar.
-- Si alguna tabla de este modulo ya existe, detenerse y revisar; no repetir a ciegas.

SET NAMES utf8mb4;

CREATE TABLE `ancheteria_temporadas` (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
  `codigo` varchar(20) NOT NULL,
  `nombre` varchar(100) NOT NULL,
  `fecha_inicio` date NOT NULL,
  `fecha_fin` date NOT NULL,
  `estado` varchar(20) NOT NULL DEFAULT 'ABIERTA',
  `usuario_creacion` varchar(100) DEFAULT NULL,
  `fecha_creacion` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `usuario_cierre` varchar(100) DEFAULT NULL,
  `fecha_cierre` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uq_ancheteria_temporada_codigo` (`codigo`),
  KEY `idx_ancheteria_temporada_estado` (`estado`,`fecha_inicio`,`fecha_fin`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

CREATE TABLE `ancheteria_cierres` (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
  `temporada_id` bigint UNSIGNED NOT NULL,
  `tipo_proceso` varchar(30) NOT NULL DEFAULT 'COPIA_PRUEBA',
  `estado` varchar(30) NOT NULL DEFAULT 'CREADO',
  `fecha_desde` date NOT NULL,
  `fecha_hasta` date NOT NULL,
  `tipos_factura_json` longtext DEFAULT NULL,
  `resumen_origen_json` longtext DEFAULT NULL,
  `resumen_historico_json` longtext DEFAULT NULL,
  `resumen_eliminacion_json` longtext DEFAULT NULL,
  `validaciones_json` longtext DEFAULT NULL,
  `huella_seleccion` char(64) DEFAULT NULL,
  `usuario_id` int DEFAULT NULL,
  `usuario` varchar(100) NOT NULL,
  `fecha_solicitud` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_inicio` datetime DEFAULT NULL,
  `fecha_fin` datetime DEFAULT NULL,
  `fecha_limpieza` datetime DEFAULT NULL,
  `usuario_limpieza_id` int DEFAULT NULL,
  `usuario_limpieza` varchar(100) DEFAULT NULL,
  `mensaje_error` text DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_ancheteria_cierre_temporada` (`temporada_id`,`estado`),
  KEY `idx_ancheteria_cierre_fecha` (`fecha_solicitud`),
  CONSTRAINT `fk_ancheteria_cierre_temporada`
    FOREIGN KEY (`temporada_id`) REFERENCES `ancheteria_temporadas` (`id`)
    ON UPDATE RESTRICT ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

ALTER TABLE `ordenes_ancheteria`
  ADD COLUMN `temporada_id` bigint UNSIGNED DEFAULT NULL AFTER `id`;

ALTER TABLE `ordenes_ancheteria`
  ADD INDEX `idx_ordenes_ancheteria_temporada` (`temporada_id`,`fecha_creacion`,`tipo_factura`);

ALTER TABLE `ordenes_ancheteria`
  ADD CONSTRAINT `fk_ordenes_ancheteria_temporada`
  FOREIGN KEY (`temporada_id`) REFERENCES `ancheteria_temporadas` (`id`)
  ON UPDATE RESTRICT ON DELETE RESTRICT;

-- Las tablas historicas se crean VACIAS con las columnas/indices operativos actuales.
-- CREATE TABLE LIKE no copia las relaciones foraneas de las tablas de origen.
CREATE TABLE `hist_ordenes_ancheteria` LIKE `ordenes_ancheteria`;
ALTER TABLE `hist_ordenes_ancheteria`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_documentos` LIKE `ancheteria_documentos`;
ALTER TABLE `hist_ancheteria_documentos`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_orden_items` LIKE `ancheteria_orden_items`;
ALTER TABLE `hist_ancheteria_orden_items`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_orden_item_componentes` LIKE `ancheteria_orden_item_componentes`;
ALTER TABLE `hist_ancheteria_orden_item_componentes`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_entregas` LIKE `ancheteria_entregas`;
ALTER TABLE `hist_ancheteria_entregas`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_entrega_items` LIKE `ancheteria_entrega_items`;
ALTER TABLE `hist_ancheteria_entrega_items`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_entrega_conjunta` LIKE `ancheteria_entrega_conjunta`;
ALTER TABLE `hist_ancheteria_entrega_conjunta`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_entrega_conjunta_orden` LIKE `ancheteria_entrega_conjunta_orden`;
ALTER TABLE `hist_ancheteria_entrega_conjunta_orden`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_anulaciones` LIKE `ancheteria_anulaciones`;
ALTER TABLE `hist_ancheteria_anulaciones`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_desarme_tareas` LIKE `ancheteria_desarme_tareas`;
ALTER TABLE `hist_ancheteria_desarme_tareas`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_auditoria` LIKE `ancheteria_auditoria`;
ALTER TABLE `hist_ancheteria_auditoria`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `hist_ancheteria_produccion_tareas` LIKE `ancheteria_produccion_tareas`;
ALTER TABLE `hist_ancheteria_produccion_tareas`
  ADD COLUMN `cierre_id` bigint UNSIGNED NOT NULL FIRST,
  ADD COLUMN `archivado_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ADD COLUMN `archivado_por` varchar(100) NOT NULL DEFAULT 'sistema',
  ADD INDEX `idx_hist_cierre` (`cierre_id`);

CREATE TABLE `ancheteria_cierre_eventos` (
  `id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
  `cierre_id` bigint UNSIGNED NOT NULL,
  `tipo_evento` varchar(40) NOT NULL,
  `estado` varchar(30) NOT NULL,
  `usuario_id` int DEFAULT NULL,
  `usuario` varchar(100) NOT NULL,
  `resumen_json` longtext DEFAULT NULL,
  `resultado_json` longtext DEFAULT NULL,
  `mensaje` text DEFAULT NULL,
  `fecha_inicio` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `fecha_fin` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_ancheteria_cierre_eventos_cierre` (`cierre_id`,`fecha_inicio`),
  KEY `idx_ancheteria_cierre_eventos_estado` (`estado`,`fecha_inicio`),
  CONSTRAINT `fk_ancheteria_cierre_eventos_cierre`
    FOREIGN KEY (`cierre_id`) REFERENCES `ancheteria_cierres` (`id`)
    ON UPDATE RESTRICT ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

-- Este archivo NO inserta temporadas, NO asigna ordenes, NO copia historicos
-- y NO ejecuta el cierre definitivo.
