-- IAPTEL 0.4.0 — Governança, permissões granulares, workflow e relatório executivo
-- Idempotente quando possível (CREATE IF NOT EXISTS, INSERT condicional)

SET NAMES utf8mb4;

CREATE TABLE IF NOT EXISTS TB_MODULOS_SISTEMA (
  ID_MODULO INT AUTO_INCREMENT PRIMARY KEY,
  CODIGO VARCHAR(80) NOT NULL,
  NOME VARCHAR(150) NOT NULL,
  GRUPO_MENU VARCHAR(100) NULL,
  DESCRICAO TEXT NULL,
  ATIVO TINYINT NOT NULL DEFAULT 1,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  UNIQUE KEY UK_MOD_COD (CODIGO),
  KEY IDX_MOD_ATIVO (ATIVO)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO TB_MODULOS_SISTEMA (CODIGO, NOME, GRUPO_MENU, DESCRICAO) VALUES
('dashboard', 'Dashboard', 'Painel', 'Painel principal'),
('usuarios', 'Usuários', 'Administração', 'Gestão de usuários'),
('perfis', 'Perfis', 'Administração', 'Documentação de perfis'),
('permissoes', 'Permissões', 'Governança', 'Matriz de permissões'),
('corredores', 'Corredores', 'Territorial', 'Cadastro de corredores'),
('comunidades', 'Comunidades', 'Territorial', 'Cadastro de comunidades'),
('nos_logisticos', 'Nós logísticos', 'Territorial', 'Bases e nós'),
('rotas', 'Rotas', 'Territorial', 'Rotas calculadas'),
('mapa', 'Mapa territorial', 'Territorial', 'Mapa'),
('importacoes', 'Importações', 'Territorial', 'Importação CSV'),
('fontes', 'Fontes', 'Evidências', 'Fontes bibliográficas'),
('arquivos', 'Arquivos', 'Evidências', 'Repositório de arquivos'),
('vinculos', 'Vínculos', 'Evidências', 'Vínculos de evidências'),
('riscos', 'Riscos / FMEA', 'Engenharia', 'FMEA'),
('regulatorio', 'Regulatório', 'Regulatório', 'Requisitos'),
('financeiro', 'Financeiro', 'Financeiro', 'CAPEX/OPEX'),
('dossies', 'Dossiês', 'Documentos', 'Dossiês gerados'),
('documentos', 'Documentos', 'Documentos', 'Documentos do projeto'),
('relatorio_executivo', 'Relatório executivo', 'Relatórios', 'Relatório consolidado'),
('aprovacoes', 'Aprovações', 'Governança', 'Workflow'),
('logs', 'Logs', 'Governança', 'Trilha de auditoria'),
('releases', 'Releases', 'Administração', 'Versões publicadas')
ON DUPLICATE KEY UPDATE NOME=VALUES(NOME), GRUPO_MENU=VALUES(GRUPO_MENU), DESCRICAO=VALUES(DESCRICAO), ATIVO=1;

CREATE TABLE IF NOT EXISTS TB_PERFIL_PERMISSOES (
  ID_PERMISSAO BIGINT AUTO_INCREMENT PRIMARY KEY,
  PERFIL VARCHAR(50) NOT NULL,
  CODIGO_MODULO VARCHAR(80) NOT NULL,
  PODE_VER TINYINT NOT NULL DEFAULT 0,
  PODE_CRIAR TINYINT NOT NULL DEFAULT 0,
  PODE_EDITAR TINYINT NOT NULL DEFAULT 0,
  PODE_EXCLUIR TINYINT NOT NULL DEFAULT 0,
  PODE_APROVAR TINYINT NOT NULL DEFAULT 0,
  PODE_EXPORTAR TINYINT NOT NULL DEFAULT 0,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ATUALIZADO_EM DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  ATUALIZADO_POR INT NULL,
  UNIQUE KEY UK_PERFIL_MOD (PERFIL, CODIGO_MODULO),
  KEY IDX_PERFIL (PERFIL),
  CONSTRAINT FK_PERMP_CRIADO FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL,
  CONSTRAINT FK_PERMP_ATUAL 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_WORKFLOW_APROVACOES (
  ID_APROVACAO BIGINT AUTO_INCREMENT PRIMARY KEY,
  TIPO_ENTIDADE ENUM('COMUNIDADE','NO_LOGISTICO','ROTA','CORREDOR','RISCO_FMEA','REQUISITO_REGULATORIO','FINANCEIRO_ITEM','DOCUMENTO','DOSSIE') NOT NULL,
  ID_ENTIDADE BIGINT NOT NULL,
  STATUS ENUM('RASCUNHO','PENDENTE','APROVADO','REJEITADO','REVISAO_SOLICITADA','CANCELADO') NOT NULL DEFAULT 'RASCUNHO',
  TITULO VARCHAR(220) NULL,
  JUSTIFICATIVA TEXT NULL,
  PARECER TEXT NULL,
  SOLICITADO_POR INT NULL,
  SOLICITADO_EM DATETIME NULL,
  AVALIADO_POR INT NULL,
  AVALIADO_EM DATETIME NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  ATUALIZADO_EM DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  KEY IDX_WF_ENT (TIPO_ENTIDADE, ID_ENTIDADE),
  KEY IDX_WF_STAT (STATUS),
  KEY IDX_WF_SOL (SOLICITADO_POR),
  CONSTRAINT FK_WF_SOL FOREIGN KEY (SOLICITADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL,
  CONSTRAINT FK_WF_AVAL FOREIGN KEY (AVALIADO_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_WORKFLOW_HISTORICO (
  ID_HISTORICO BIGINT AUTO_INCREMENT PRIMARY KEY,
  ID_APROVACAO BIGINT NOT NULL,
  STATUS_ANTERIOR VARCHAR(50) NULL,
  STATUS_NOVO VARCHAR(50) NOT NULL,
  COMENTARIO TEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_WFH_APROV (ID_APROVACAO),
  CONSTRAINT FK_WFH_APROV FOREIGN KEY (ID_APROVACAO) REFERENCES TB_WORKFLOW_APROVACOES (ID_APROVACAO) ON DELETE CASCADE,
  CONSTRAINT FK_WFH_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_RELATORIOS_GERADOS (
  ID_RELATORIO BIGINT AUTO_INCREMENT PRIMARY KEY,
  TIPO_RELATORIO ENUM('EXECUTIVO_GERAL','CORREDOR','FINANCEIRO','REGULATORIO','FMEA','CUSTOMIZADO') NOT NULL DEFAULT 'EXECUTIVO_GERAL',
  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,
  TAMANHO_HTML BIGINT NULL,
  TAMANHO_PDF BIGINT NULL,
  TAMANHO_DOCX BIGINT NULL,
  PARAMETROS_JSON MEDIUMTEXT NULL,
  CRIADO_EM DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  CRIADO_POR INT NULL,
  KEY IDX_REL_STAT (STATUS),
  KEY IDX_REL_CRIADO (CRIADO_EM),
  CONSTRAINT FK_REL_USR FOREIGN KEY (CRIADO_POR) REFERENCES TB_USUARIOS (ID_USUARIO) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO TB_CONFIG_SISTEMA (CHAVE, VALOR, DESCRICAO) VALUES
('VERSAO_ATUAL', '0.4.0', 'Versão publicada do sistema'),
('WORKFLOW_APROVACAO_ATIVO', '1', 'Habilita solicitação de aprovação'),
('RELATORIO_GERAR_DOCX', '1', 'Tenta gerar DOCX se PHPWord disponível'),
('RELATORIO_GERAR_PDF', '1', 'Tenta gerar PDF se Dompdf disponível'),
('PERMISSOES_GRANULARES_ATIVAS', '1', 'Habilita matriz TB_PERFIL_PERMISSOES')
ON DUPLICATE KEY UPDATE VALOR=VALUES(VALOR), DESCRICAO=VALUES(DESCRICAO);

INSERT INTO TB_RELEASES (VERSAO, NOME, DESCRICAO, TIPO, STATUS, DATA_RELEASE, PUBLICADO)
VALUES ('0.4.0', 'Governança, permissões, workflow de aprovação e relatório executivo consolidado',
       'Permissões granulares, workflow de aprovação, relatório executivo HTML/PDF/DOCX opcional.',
       'minor', 'publicado', CURDATE(), 1)
ON DUPLICATE KEY UPDATE NOME=VALUES(NOME), DESCRICAO=VALUES(DESCRICAO), STATUS=VALUES(STATUS), PUBLICADO=VALUES(PUBLICADO);

-- Seeds de permissões (idempotente: apaga por perfil+conjunto de módulos e reinsere seria pesado; usamos INSERT IGNORE com UK)
-- engenharia
INSERT IGNORE INTO TB_PERFIL_PERMISSOES (PERFIL, CODIGO_MODULO, PODE_VER, PODE_CRIAR, PODE_EDITAR, PODE_EXCLUIR, PODE_APROVAR, PODE_EXPORTAR) VALUES
('engenharia', 'dashboard', 1, 0, 0, 0, 0, 0),
('engenharia', 'comunidades', 1, 1, 1, 0, 0, 1),
('engenharia', 'rotas', 1, 1, 1, 0, 0, 1),
('engenharia', 'riscos', 1, 1, 1, 0, 0, 1),
('engenharia', 'dossies', 1, 1, 1, 0, 0, 1),
('engenharia', 'relatorio_executivo', 1, 1, 1, 0, 0, 1),
('engenharia', 'corredores', 1, 0, 0, 0, 0, 0),
('engenharia', 'nos_logisticos', 1, 0, 0, 0, 0, 0),
('engenharia', 'aprovacoes', 1, 1, 0, 0, 0, 0),
('engenharia', 'mapa', 1, 0, 0, 0, 0, 0),
('engenharia', 'importacoes', 1, 0, 0, 0, 0, 0);
INSERT IGNORE INTO TB_PERFIL_PERMISSOES (PERFIL, CODIGO_MODULO, PODE_VER, PODE_CRIAR, PODE_EDITAR, PODE_EXCLUIR, PODE_APROVAR, PODE_EXPORTAR) VALUES
('pesquisa', 'dashboard', 1, 0, 0, 0, 0, 0),
('pesquisa', 'comunidades', 1, 1, 1, 0, 0, 0),
('pesquisa', 'fontes', 1, 1, 1, 0, 0, 0),
('pesquisa', 'arquivos', 1, 1, 1, 0, 0, 0),
('pesquisa', 'vinculos', 1, 1, 1, 0, 0, 0),
('regulatorio', 'dashboard', 1, 0, 0, 0, 0, 0),
('regulatorio', 'regulatorio', 1, 1, 1, 0, 1, 0),
('regulatorio', 'rotas', 1, 1, 1, 0, 1, 0),
('regulatorio', 'aprovacoes', 1, 0, 0, 0, 1, 0),
('financeiro', 'dashboard', 1, 0, 0, 0, 0, 0),
('financeiro', 'financeiro', 1, 1, 1, 0, 0, 1),
('financeiro', 'relatorio_executivo', 1, 1, 1, 0, 0, 1),
('financeiro', 'aprovacoes', 1, 0, 0, 0, 0, 0);
INSERT IGNORE INTO TB_PERFIL_PERMISSOES (PERFIL, CODIGO_MODULO, PODE_VER, PODE_CRIAR, PODE_EDITAR, PODE_EXCLUIR, PODE_APROVAR, PODE_EXPORTAR) VALUES
('auditor', 'dashboard', 1, 0, 0, 0, 0, 1),
('auditor', 'usuarios', 1, 0, 0, 0, 0, 1),
('auditor', 'perfis', 1, 0, 0, 0, 0, 1),
('auditor', 'permissoes', 1, 0, 0, 0, 0, 1),
('auditor', 'corredores', 1, 0, 0, 0, 0, 1),
('auditor', 'comunidades', 1, 0, 0, 0, 0, 1),
('auditor', 'nos_logisticos', 1, 0, 0, 0, 0, 1),
('auditor', 'rotas', 1, 0, 0, 0, 0, 1),
('auditor', 'mapa', 1, 0, 0, 0, 0, 1),
('auditor', 'importacoes', 1, 0, 0, 0, 0, 1),
('auditor', 'fontes', 1, 0, 0, 0, 0, 1),
('auditor', 'arquivos', 1, 0, 0, 0, 0, 1),
('auditor', 'vinculos', 1, 0, 0, 0, 0, 1),
('auditor', 'riscos', 1, 0, 0, 0, 0, 1),
('auditor', 'regulatorio', 1, 0, 0, 0, 0, 1),
('auditor', 'financeiro', 1, 0, 0, 0, 0, 1),
('auditor', 'dossies', 1, 0, 0, 0, 0, 1),
('auditor', 'relatorio_executivo', 1, 0, 0, 0, 0, 1),
('auditor', 'aprovacoes', 1, 0, 0, 0, 0, 1),
('auditor', 'logs', 1, 0, 0, 0, 0, 1),
('auditor', 'releases', 1, 0, 0, 0, 0, 1);
INSERT IGNORE INTO TB_PERFIL_PERMISSOES (PERFIL, CODIGO_MODULO, PODE_VER, PODE_CRIAR, PODE_EDITAR, PODE_EXCLUIR, PODE_APROVAR, PODE_EXPORTAR) VALUES
('consulta', 'dashboard', 1, 0, 0, 0, 0, 0),
('consulta', 'dossies', 1, 0, 0, 0, 0, 0),
('consulta', 'relatorio_executivo', 1, 0, 0, 0, 0, 0);
