-- IAPTEL 0.6.0 — APIs oficiais, validação territorial, análise fluvial, capítulos automáticos e pacote final

CREATE TABLE IF NOT EXISTS TB_API_COLETAS (
  ID_COLETA BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_API BIGINT NOT NULL,
  TIPO_COLETA ENUM('MUNICIPIOS','LOCALIDADES','UNIDADES_SAUDE','DSEI','GEODADOS','REGULATORIO','OUTRO') NOT NULL DEFAULT 'OUTRO',
  PARAMETROS_JSON MEDIUMTEXT NULL,
  URL_FINAL TEXT NULL,
  STATUS ENUM('PENDENTE','EXECUTADA','ERRO','CANCELADA') NOT NULL DEFAULT 'PENDENTE',
  HTTP_STATUS INT NULL,
  TOTAL_ITENS INT NOT NULL DEFAULT 0,
  ITENS_VALIDOS INT NOT NULL DEFAULT 0,
  ITENS_INVALIDOS INT NOT NULL DEFAULT 0,
  MENSAGEM TEXT NULL,
  INICIADO_EM DATETIME NULL,
  FINALIZADO_EM DATETIME NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_COL_API (ID_API),
  KEY IDX_COL_STAT (STATUS),
  CONSTRAINT FK_COL_API FOREIGN KEY (ID_API) REFERENCES TB_APIS_OFICIAIS (ID_API) ON DELETE CASCADE,
  CONSTRAINT FK_COL_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_API_COLETA_ITENS (
  ID_ITEM BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_COLETA BIGINT NOT NULL,
  CHAVE_EXTERNA VARCHAR(180) NULL,
  NOME VARCHAR(255) NULL,
  DADOS_JSON LONGTEXT NULL,
  VALIDO TINYINT NOT NULL DEFAULT 0,
  ENTIDADE_SUGERIDA VARCHAR(100) NULL,
  ID_ENTIDADE_GERADA BIGINT NULL,
  MENSAGEM TEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  KEY IDX_ACI_COL (ID_COLETA),
  CONSTRAINT FK_ACI_COL FOREIGN KEY (ID_COLETA) REFERENCES TB_API_COLETAS (ID_COLETA) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

CREATE TABLE IF NOT EXISTS TB_COORDENADAS_VALIDACOES (
  ID_VALIDACAO BIGINT AUTO_INCREMENT PRIMARY KEY,
  TIPO_ENTIDADE ENUM('COMUNIDADE','NO_LOGISTICO','ROTA','GEOCAMADA') NOT NULL,
  ID_ENTIDADE BIGINT NOT NULL,
  LATITUDE DECIMAL(10,7) NULL,
  LONGITUDE DECIMAL(10,7) NULL,
  STATUS_VALIDACAO ENUM('VALIDA','SUSPEITA','INVALIDA','SEM_COORDENADA','PENDENTE') NOT NULL DEFAULT 'PENDENTE',
  MOTIVO TEXT NULL,
  DISTANCIA_REFERENCIA_KM DECIMAL(10,2) NULL,
  FONTE_REFERENCIA TEXT NULL,
  VALIDADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  VALIDADO_POR INT NULL,
  KEY IDX_CV_ENT (TIPO_ENTIDADE, ID_ENTIDADE),
  KEY IDX_CV_STAT (STATUS_VALIDACAO),
  CONSTRAINT FK_CV_USR FOREIGN KEY (VALIDADO_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_FLUVIAIS (
  ID_ROTA_FLUVIAL BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_ROTA INT NULL,
  ORIGEM_NOME VARCHAR(220) NULL,
  DESTINO_NOME VARCHAR(220) NULL,
  DISTANCIA_AEREA_KM DECIMAL(10,2) NULL,
  DISTANCIA_FLUVIAL_KM DECIMAL(10,2) NULL,
  TEMPO_FLUVIAL_HORAS DECIMAL(10,2) NULL,
  FATOR_SINUOSIDADE DECIMAL(10,3) NULL,
  FONTE_DISTANCIA TEXT NULL,
  FONTE_TEMPO TEXT NULL,
  METODO ENUM('MANUAL','IMPORTADO','ESTIMADO','OSM','OUTRO') NOT NULL DEFAULT 'MANUAL',
  OBSERVACOES TEXT NULL,
  STATUS ENUM('RASCUNHO','VALIDADO','PENDENTE','REJEITADO') NOT NULL DEFAULT 'RASCUNHO',
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ATUALIZADO_EM DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  ATUALIZADO_POR INT NULL,
  ATIVO TINYINT NOT NULL DEFAULT 1,
  KEY IDX_RF_ROTA (ID_ROTA),
  KEY IDX_RF_STAT (STATUS),
  CONSTRAINT FK_RF_ROTA FOREIGN KEY (ID_ROTA) REFERENCES TB_ROTAS (ID_ROTA) ON DELETE SET NULL,
  CONSTRAINT FK_RF_CRI FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL,
  CONSTRAINT FK_RF_ATU FOREIGN KEY (ATUALIZADO_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_ANALITICO_CORREDOR (
  ID_ANALITICO BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_CORREDOR INT NOT NULL,
  TOTAL_COMUNIDADES INT NOT NULL DEFAULT 0,
  COMUNIDADES_COM_COORD INT NOT NULL DEFAULT 0,
  COMUNIDADES_SEM_COORD INT NOT NULL DEFAULT 0,
  TOTAL_NOS INT NOT NULL DEFAULT 0,
  TOTAL_ROTAS INT NOT NULL DEFAULT 0,
  ROTAS_ATE_40KM INT NOT NULL DEFAULT 0,
  ROTAS_40_70KM INT NOT NULL DEFAULT 0,
  ROTAS_70_120KM INT NOT NULL DEFAULT 0,
  ROTAS_120_200KM INT NOT NULL DEFAULT 0,
  ROTAS_FORA_200KM INT NOT NULL DEFAULT 0,
  RISCOS_CRITICOS INT NOT NULL DEFAULT 0,
  REQUISITOS_PENDENTES INT NOT NULL DEFAULT 0,
  CAPEX_PROVAVEL DECIMAL(15,2) NOT NULL DEFAULT 0,
  OPEX_MENSAL_PROVAVEL DECIMAL(15,2) NOT NULL DEFAULT 0,
  LACUNAS_JSON MEDIUMTEXT NULL,
  GERADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  GERADO_POR INT NULL,
  KEY IDX_ANC_COR (ID_CORREDOR),
  KEY IDX_ANC_DATA (GERADO_EM),
  CONSTRAINT FK_ANC_COR FOREIGN KEY (ID_CORREDOR) REFERENCES TB_CORREDORES (ID_CORREDOR) ON DELETE CASCADE,
  CONSTRAINT FK_ANC_USR FOREIGN KEY (GERADO_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_PROJETO_CAPITULOS (
  ID_CAPITULO BIGINT AUTO_INCREMENT PRIMARY KEY,
  CODIGO VARCHAR(80) NOT NULL,
  TITULO VARCHAR(255) NOT NULL,
  ORDEM INT NOT NULL DEFAULT 0,
  DESCRICAO TEXT NULL,
  CONTEUDO_BASE LONGTEXT NULL,
  CONTEUDO_GERADO LONGTEXT NULL,
  STATUS ENUM('PENDENTE','GERADO','EM_REVISAO','APROVADO','ARQUIVADO') NOT NULL DEFAULT 'PENDENTE',
  GERADO_EM DATETIME NULL,
  GERADO_POR INT NULL,
  ATUALIZADO_EM DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  ATUALIZADO_POR INT NULL,
  ATIVO TINYINT NOT NULL DEFAULT 1,
  UNIQUE KEY UK_CAP_COD (CODIGO),
  KEY IDX_CAP_ORD (ORDEM),
  KEY IDX_CAP_STAT (STATUS),
  CONSTRAINT FK_CAP_GER FOREIGN KEY (GERADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL,
  CONSTRAINT FK_CAP_ATU FOREIGN KEY (ATUALIZADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO TB_PROJETO_CAPITULOS (CODIGO, TITULO, ORDEM, DESCRICAO, STATUS, ATIVO) VALUES
('01_SUMARIO_EXECUTIVO', 'Sumário executivo', 1, 'Visão consolidada do projeto.', 'PENDENTE', 1),
('02_CONTROLE_DOCUMENTAL', 'Controle documental', 2, 'Rastreabilidade e governança documental.', 'PENDENTE', 1),
('03_JUSTIFICATIVA_TERRITORIAL', 'Justificativa territorial', 3, 'Contexto amazônico e desafios logísticos.', 'PENDENTE', 1),
('04_METODOLOGIA', 'Metodologia', 4, 'Abordagem técnica do IAPTEL.', 'PENDENTE', 1),
('05_CORREDORES_PRIORITARIOS', 'Corredores prioritários', 5, 'Malha de corredores cadastrada.', 'PENDENTE', 1),
('06_COMUNIDADES_ATENDIVEIS', 'Comunidades atendíveis', 6, 'Demanda territorial e criticidade.', 'PENDENTE', 1),
('07_MODELO_EXPANSAO_BASES', 'Modelo de expansão de bases', 7, 'Nós logísticos e papéis.', 'PENDENTE', 1),
('08_MATRIZ_ROTAS', 'Matriz de rotas', 8, 'Rotas, distâncias e classificação.', 'PENDENTE', 1),
('09_ENGENHARIA_MISSAO', 'Engenharia de missão', 9, 'Parâmetros de operação VTOL.', 'PENDENTE', 1),
('10_AERONAVE_ENVELOPE', 'Aeronave e envelope operacional', 10, 'Restrições e premissas.', 'PENDENTE', 1),
('11_BASES_REMOTAS', 'Bases remotas', 11, 'Infraestrutura periférica.', 'PENDENTE', 1),
('12_ENERGIA_BESS', 'Energia e BESS', 12, 'Suprimento energético.', 'PENDENTE', 1),
('13_TELECOM_C2_LEO', 'Telecom C2 e LEO', 13, 'Conectividade.', 'PENDENTE', 1),
('14_NOC_DADOS', 'NOC e dados', 14, 'Operação e dados.', 'PENDENTE', 1),
('15_SAUDE_CADEIA_FRIA', 'Saúde e cadeia fria', 15, 'Logística sanitária.', 'PENDENTE', 1),
('16_OPERACAO_CAMPO', 'Operação de campo', 16, 'Procedimentos de campo.', 'PENDENTE', 1),
('17_SEGURANCA_FMEA', 'Segurança e FMEA', 17, 'Riscos e mitigação.', 'PENDENTE', 1),
('18_REGULATORIO', 'Regulatório', 18, 'Requisitos e conformidade.', 'PENDENTE', 1),
('19_FINANCEIRO', 'Financeiro', 19, 'CAPEX/OPEX e cenários.', 'PENDENTE', 1),
('20_CRONOGRAMA', 'Cronograma', 20, 'Planejamento temporal.', 'PENDENTE', 1),
('21_PLANO_PILOTO', 'Plano piloto', 21, 'Fase piloto.', 'PENDENTE', 1),
('22_EXPANSAO', 'Expansão', 22, 'Expansão da malha.', 'PENDENTE', 1),
('23_LACUNAS', 'Lacunas', 23, 'Gaps técnicos identificados.', 'PENDENTE', 1),
('24_ANEXOS', 'Anexos e evidências', 24, 'Referências probatórias.', 'PENDENTE', 1)
ON DUPLICATE KEY UPDATE TITULO=VALUES(TITULO), ORDEM=VALUES(ORDEM), DESCRICAO=VALUES(DESCRICAO), ATIVO=1;

CREATE TABLE IF NOT EXISTS TB_PROJETO_MASTERS (
  ID_MASTER BIGINT AUTO_INCREMENT PRIMARY KEY,
  TITULO VARCHAR(255) NOT NULL,
  VERSAO VARCHAR(30) NOT NULL DEFAULT '0.1',
  STATUS ENUM('GERADO','ARQUIVADO','ERRO') NOT NULL DEFAULT 'GERADO',
  CAMINHO_HTML TEXT NULL,
  CAMINHO_PDF TEXT NULL,
  CAMINHO_DOCX TEXT NULL,
  HASH_HTML VARCHAR(64) NULL,
  HASH_PDF VARCHAR(64) NULL,
  HASH_DOCX VARCHAR(64) NULL,
  PARAMETROS_JSON MEDIUMTEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_PM_STAT (STATUS),
  CONSTRAINT FK_PM_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_PACOTES_GERADOS (
  ID_PACOTE BIGINT AUTO_INCREMENT PRIMARY KEY,
  TITULO VARCHAR(255) NOT NULL,
  TIPO ENUM('PROJETO_COMPLETO','CORREDOR','AUDITORIA','CUSTOMIZADO') NOT NULL DEFAULT 'PROJETO_COMPLETO',
  CAMINHO_ZIP TEXT NULL,
  HASH_ZIP VARCHAR(64) NULL,
  TAMANHO_ZIP BIGINT NULL,
  MANIFESTO_JSON LONGTEXT NULL,
  STATUS ENUM('GERADO','ARQUIVADO','ERRO') NOT NULL DEFAULT 'GERADO',
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_PG_STAT (STATUS),
  CONSTRAINT FK_PG_USR FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

ALTER TABLE TB_REGISTRO_VERSOES
  MODIFY COLUMN TIPO_ENTIDADE ENUM(
    'COMUNIDADE','NO_LOGISTICO','ROTA','CORREDOR','RISCO_FMEA','REQUISITO_REGULATORIO','FINANCEIRO_ITEM',
    'DOCUMENTO','DOCUMENTO_SECAO','FONTE','ARQUIVO','DOSSIE','RELATORIO','PROJETO_CAPITULO'
  ) NOT NULL;

ALTER TABLE TB_WORKFLOW_APROVACOES
  MODIFY COLUMN TIPO_ENTIDADE ENUM(
    'COMUNIDADE','NO_LOGISTICO','ROTA','CORREDOR','RISCO_FMEA','REQUISITO_REGULATORIO','FINANCEIRO_ITEM',
    'DOCUMENTO','DOSSIE','PROJETO_CAPITULO'
  ) NOT NULL;

INSERT INTO TB_CONFIG_SISTEMA (CHAVE, VALOR, DESCRICAO) VALUES
('VERSAO_ATUAL', '0.6.0', 'Versão publicada do sistema'),
('APIS_OFICIAIS_ATIVAS', '1', 'Módulo de APIs oficiais e coletas'),
('VALIDACAO_COORDENADAS_ATIVA', '1', 'Validação territorial de coordenadas'),
('ROTAS_FLUVIAIS_ATIVAS', '1', 'Análise fluvial vs aérea'),
('ANALITICO_CORREDOR_ATIVO', '1', 'Painel analítico por corredor'),
('PROJETO_CAPITULOS_ATIVO', '1', 'Geração de capítulos do projeto executivo'),
('PACOTE_FINAL_ATIVO', '1', 'Pacote ZIP final')
ON DUPLICATE KEY UPDATE VALOR=VALUES(VALOR), DESCRICAO=VALUES(DESCRICAO);

INSERT INTO TB_RELEASES (VERSAO, NOME, DESCRICAO, TIPO, STATUS, DATA_RELEASE, PUBLICADO)
VALUES (
  '0.6.0',
  'APIs oficiais, validação territorial, análise fluvial, capítulos automáticos e pacote final',
  'Integração controlada a fontes oficiais, validação de coordenadas, rotas fluviais, analítico por corredor, projeto executivo por capítulos e pacote ZIP com manifesto.',
  'minor', 'publicado', CURDATE(), 1
)
ON DUPLICATE KEY UPDATE NOME=VALUES(NOME), DESCRICAO=VALUES(DESCRICAO), STATUS=VALUES(STATUS), PUBLICADO=VALUES(PUBLICADO);

INSERT INTO TB_MODULOS_SISTEMA (CODIGO, NOME, GRUPO_MENU, DESCRICAO) VALUES
('apis_oficiais', 'APIs oficiais', 'Integrações', 'Cadastro de APIs e parâmetros'),
('apis_coletas', 'Coletas oficiais', 'Integrações', 'Execução manual de coletas HTTP'),
('validacao_coordenadas', 'Validação de coordenadas', 'Validação Territorial', 'Regras e lacunas de coordenadas'),
('rotas_fluviais', 'Rotas fluviais', 'Validação Territorial', 'Distâncias e tempos fluviais'),
('analitico_corredor', 'Analítico por corredor', 'Análises', 'KPIs agregados por corredor'),
('projeto_capitulos', 'Capítulos do projeto', 'Projeto Executivo', 'Geração e edição de capítulos'),
('projeto_master', 'Projeto master', 'Projeto Executivo', 'Consolidação HTML/PDF/DOCX'),
('pacote_final', 'Pacote final', 'Projeto Executivo', 'ZIP com manifesto e hashes')
ON DUPLICATE KEY UPDATE NOME=VALUES(NOME), GRUPO_MENU=VALUES(GRUPO_MENU), DESCRICAO=VALUES(DESCRICAO), ATIVO=1;

INSERT IGNORE INTO TB_PERFIL_PERMISSOES (PERFIL, CODIGO_MODULO, PODE_VER, PODE_CRIAR, PODE_EDITAR, PODE_EXCLUIR, PODE_APROVAR, PODE_EXPORTAR) VALUES
('engenharia', 'apis_oficiais', 1, 1, 1, 0, 0, 1),
('engenharia', 'apis_coletas', 1, 1, 0, 0, 0, 1),
('engenharia', 'validacao_coordenadas', 1, 1, 1, 0, 0, 1),
('engenharia', 'rotas_fluviais', 1, 1, 1, 0, 0, 1),
('engenharia', 'analitico_corredor', 1, 1, 1, 0, 0, 1),
('engenharia', 'projeto_capitulos', 1, 1, 1, 0, 0, 1),
('engenharia', 'projeto_master', 1, 1, 0, 0, 0, 1),
('engenharia', 'pacote_final', 1, 1, 0, 0, 0, 1),
('pesquisa', 'apis_oficiais', 1, 0, 0, 0, 0, 0),
('pesquisa', 'apis_coletas', 1, 1, 0, 0, 0, 0),
('pesquisa', 'validacao_coordenadas', 1, 1, 0, 0, 0, 0),
('pesquisa', 'rotas_fluviais', 1, 1, 1, 0, 0, 0),
('pesquisa', 'analitico_corredor', 1, 1, 0, 0, 0, 0),
('pesquisa', 'projeto_capitulos', 1, 1, 1, 0, 0, 0),
('pesquisa', 'projeto_master', 1, 0, 0, 0, 0, 0),
('pesquisa', 'pacote_final', 1, 0, 0, 0, 0, 0),
('auditor', 'apis_oficiais', 1, 0, 0, 0, 0, 1),
('auditor', 'apis_coletas', 1, 0, 0, 0, 0, 1),
('auditor', 'validacao_coordenadas', 1, 0, 0, 0, 0, 1),
('auditor', 'rotas_fluviais', 1, 0, 0, 0, 0, 1),
('auditor', 'analitico_corredor', 1, 0, 0, 0, 0, 1),
('auditor', 'projeto_capitulos', 1, 0, 0, 0, 0, 1),
('auditor', 'projeto_master', 1, 0, 0, 0, 0, 1),
('auditor', 'pacote_final', 1, 0, 0, 0, 0, 1),
('consulta', 'apis_oficiais', 1, 0, 0, 0, 0, 0),
('consulta', 'apis_coletas', 1, 0, 0, 0, 0, 0),
('consulta', 'validacao_coordenadas', 1, 0, 0, 0, 0, 0),
('consulta', 'rotas_fluviais', 1, 0, 0, 0, 0, 0),
('consulta', 'analitico_corredor', 1, 0, 0, 0, 0, 0),
('consulta', 'projeto_capitulos', 1, 0, 0, 0, 0, 0),
('consulta', 'projeto_master', 1, 0, 0, 0, 0, 0),
('consulta', 'pacote_final', 1, 0, 0, 0, 0, 0);
