-- IAPTEL 0.2.0 — Migração: matriz territorial, importação, mapas, lotes e vínculos
-- Idempotente: CREATE IF NOT EXISTS / INSERT IGNORE / ON DUPLICATE KEY

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS TB_IMPORTACOES (
  ID_IMPORTACAO BIGINT AUTO_INCREMENT PRIMARY KEY,
  TIPO_IMPORTACAO VARCHAR(100) NOT NULL,
  NOME_ARQUIVO VARCHAR(255) NULL,
  HASH_SHA256 VARCHAR(64) NULL,
  TOTAL_LINHAS INT NOT NULL DEFAULT 0,
  LINHAS_VALIDAS INT NOT NULL DEFAULT 0,
  LINHAS_INVALIDAS INT NOT NULL DEFAULT 0,
  LINHAS_INSERIDAS INT NOT NULL DEFAULT 0,
  LINHAS_ATUALIZADAS INT NOT NULL DEFAULT 0,
  LINHAS_IGNORADAS INT NOT NULL DEFAULT 0,
  STATUS ENUM('PREVIEW','PROCESSADA','ERRO','CANCELADA') NOT NULL DEFAULT 'PREVIEW',
  DETALHES TEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_IMP_STATUS (STATUS),
  KEY IDX_IMP_CRIADO (CRIADO_EM),
  CONSTRAINT FK_IMP_CRIADO FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS TB_IMPORTACAO_LINHAS (
  ID_LINHA BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_IMPORTACAO BIGINT NOT NULL,
  NUMERO_LINHA INT NOT NULL,
  DADOS_JSON MEDIUMTEXT NULL,
  VALIDA TINYINT NOT NULL DEFAULT 0,
  ACAO_PREVISTA ENUM('INSERIR','ATUALIZAR','IGNORAR','ERRO') NOT NULL DEFAULT 'IGNORAR',
  MENSAGEM TEXT NULL,
  ID_REGISTRO_GERADO INT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY IDX_IMPLIN_IMPORT (ID_IMPORTACAO),
  CONSTRAINT FK_IMPLIN_IMPORT FOREIGN KEY (ID_IMPORTACAO) REFERENCES TB_IMPORTACOES (ID_IMPORTACAO) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS TB_EVIDENCIAS_VINCULOS (
  ID_VINCULO BIGINT AUTO_INCREMENT PRIMARY KEY,
  TIPO_ENTIDADE ENUM('COMUNIDADE','NO_LOGISTICO','ROTA','CORREDOR','FONTE','DOCUMENTO','BASE') NOT NULL,
  ID_ENTIDADE BIGINT NOT NULL,
  ID_FONTE INT NULL,
  ID_ARQUIVO BIGINT NULL,
  DESCRICAO TEXT NULL,
  STATUS ENUM('ATIVO','ARQUIVADO') NOT NULL DEFAULT 'ATIVO',
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_VINC_ENT (TIPO_ENTIDADE, ID_ENTIDADE),
  KEY IDX_VINC_FONTE (ID_FONTE),
  KEY IDX_VINC_ARQ (ID_ARQUIVO),
  CONSTRAINT FK_VINC_FONTE FOREIGN KEY (ID_FONTE) REFERENCES TB_FONTES (ID_FONTE) ON DELETE SET NULL,
  CONSTRAINT FK_VINC_ARQ FOREIGN KEY (ID_ARQUIVO) REFERENCES TB_ARQUIVOS (ID_ARQUIVO) ON DELETE SET NULL,
  CONSTRAINT FK_VINC_USR FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS TB_ROTAS_LOTES (
  ID_LOTE BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_CORREDOR INT NULL,
  ORIGEM_TIPO VARCHAR(50) NULL,
  DESTINO_TIPO VARCHAR(50) NULL,
  TOTAL_COMBINACOES INT NOT NULL DEFAULT 0,
  ROTAS_CRIADAS INT NOT NULL DEFAULT 0,
  ROTAS_ATUALIZADAS INT NOT NULL DEFAULT 0,
  ROTAS_REJEITADAS INT NOT NULL DEFAULT 0,
  DISTANCIA_MAXIMA_KM DECIMAL(10,2) NOT NULL DEFAULT 200.00,
  STATUS ENUM('PROCESSADO','ERRO') NOT NULL DEFAULT 'PROCESSADO',
  DETALHES TEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_LOTE_COR (ID_CORREDOR),
  CONSTRAINT FK_LOTE_COR FOREIGN KEY (ID_CORREDOR) REFERENCES TB_CORREDORES (ID_CORREDOR) ON DELETE SET NULL,
  CONSTRAINT FK_LOTE_USR FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS TB_ROTAS_LOTES_ITENS (
  ID_ITEM BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_LOTE BIGINT NOT NULL,
  ORIGEM_TIPO VARCHAR(50) NULL,
  ORIGEM_ID INT NULL,
  ORIGEM_NOME VARCHAR(220) NULL,
  DESTINO_TIPO VARCHAR(50) NULL,
  DESTINO_ID INT NULL,
  DESTINO_NOME VARCHAR(220) NULL,
  DISTANCIA_AEREA_KM DECIMAL(10,2) NULL,
  CLASSE_MISSAO VARCHAR(50) NULL,
  ACAO ENUM('CRIADA','ATUALIZADA','REJEITADA','IGNORADA','ERRO') NOT NULL DEFAULT 'IGNORADA',
  MENSAGEM TEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY IDX_LOTEITEM_LOTE (ID_LOTE),
  CONSTRAINT FK_LOTEITEM_LOTE FOREIGN KEY (ID_LOTE) REFERENCES TB_ROTAS_LOTES (ID_LOTE) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT IGNORE INTO TB_RELEASES (VERSAO, NOME, DESCRICAO, TIPO, STATUS, DATA_RELEASE, PUBLICADO, CRIADO_POR)
VALUES (
  '0.2.0',
  'Matriz territorial, importação CSV, mapas e cálculo em lote de rotas',
  'Importação CSV de comunidades com preview, cálculo em lote de rotas, mapa Leaflet, vínculos de evidências (fontes/arquivos) e dossiê HTML por corredor.',
  'melhoria',
  'publicado',
  CURDATE(),
  1,
  NULL
);

INSERT INTO TB_CONFIG_SISTEMA (CHAVE, VALOR, DESCRICAO) VALUES
('VERSAO_ATUAL', '0.2.0', 'Versão ativa do sistema'),
('LIMITE_DISTANCIA_NOMINAL_KM', '200', 'Limite nominal de distância em km'),
('DISTANCIA_BVLOS_KM', '15', 'Acima desta distância exige BVLOS'),
('DISTANCIA_BASE_INTERMEDIARIA_KM', '120', 'Acima desta distância sugere base intermediária'),
('MAPA_CENTRO_LAT', '-3.4653', 'Latitude inicial do mapa'),
('MAPA_CENTRO_LON', '-62.2159', 'Longitude inicial do mapa'),
('MAPA_ZOOM_PADRAO', '6', 'Zoom padrão Leaflet')
ON DUPLICATE KEY UPDATE VALOR = VALUES(VALOR), DESCRICAO = COALESCE(VALUES(DESCRICAO), DESCRICAO);
