-- Migração para Etapas Especiais
-- Executar este script para criar as tabelas necessárias

-- 1. Criar tabela etapas_especiais
CREATE TABLE IF NOT EXISTS `etapas_especiais` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `estado_workflow_id` int(11) NOT NULL,
  `nome` varchar(100) NOT NULL,
  `codigo` varchar(30) NOT NULL,
  `descricao` text DEFAULT NULL,
  `tipo` enum('solicitacao_documentos','template_parecer') NOT NULL DEFAULT 'solicitacao_documentos',
  `configuracao` json DEFAULT NULL,
  `pasta_alfresco` varchar(255) DEFAULT NULL,
  `ativo` tinyint(1) NOT NULL DEFAULT 1,
  `obrigatorio` tinyint(1) NOT NULL DEFAULT 0,
  `ordem_execucao` int(11) NOT NULL DEFAULT 1,
  `criado_em` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `atualizado_em` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_estado_workflow_id` (`estado_workflow_id`),
  KEY `idx_codigo` (`codigo`),
  KEY `idx_ativo` (`ativo`),
  CONSTRAINT `fk_etapas_especiais_estado_workflow` FOREIGN KEY (`estado_workflow_id`) REFERENCES `estados_workflow` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Criar tabela solicitacoes_documentos
CREATE TABLE IF NOT EXISTS `solicitacoes_documentos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `processo_id` int(11) NOT NULL,
  `etapa_especial_id` int(11) NOT NULL,
  `documentos_solicitados` json NOT NULL,
  `observacoes` text DEFAULT NULL,
  `data_solicitacao` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `data_limite` timestamp NULL DEFAULT NULL,
  `status` enum('pendente','em_andamento','concluida','cancelada') NOT NULL DEFAULT 'pendente',
  `solicitado_por` int(11) NOT NULL,
  `concluido_por` int(11) DEFAULT NULL,
  `data_conclusao` timestamp NULL DEFAULT NULL,
  `criado_em` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `atualizado_em` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  KEY `idx_processo_id` (`processo_id`),
  KEY `idx_etapa_especial_id` (`etapa_especial_id`),
  KEY `idx_status` (`status`),
  KEY `idx_solicitado_por` (`solicitado_por`),
  CONSTRAINT `fk_solicitacoes_documentos_processo` FOREIGN KEY (`processo_id`) REFERENCES `processos` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_solicitacoes_documentos_etapa_especial` FOREIGN KEY (`etapa_especial_id`) REFERENCES `etapas_especiais` (`id`) ON DELETE CASCADE,
  CONSTRAINT `fk_solicitacoes_documentos_solicitado_por` FOREIGN KEY (`solicitado_por`) REFERENCES `utilizadores` (`id`),
  CONSTRAINT `fk_solicitacoes_documentos_concluido_por` FOREIGN KEY (`concluido_por`) REFERENCES `utilizadores` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. Adicionar índices para melhor performance
CREATE INDEX IF NOT EXISTS `idx_etapas_especiais_estado_ativo` ON `etapas_especiais` (`estado_workflow_id`, `ativo`);
CREATE INDEX IF NOT EXISTS `idx_solicitacoes_processo_etapa` ON `solicitacoes_documentos` (`processo_id`, `etapa_especial_id`);
CREATE INDEX IF NOT EXISTS `idx_solicitacoes_status_data` ON `solicitacoes_documentos` (`status`, `data_solicitacao`);

-- 4. Inserir dados de exemplo (opcional)
-- INSERT INTO `etapas_especiais` (`estado_workflow_id`, `nome`, `codigo`, `descricao`, `tipo`, `configuracao`, `pasta_alfresco`, `obrigatorio`, `ordem_execucao`) VALUES
-- (1, 'Solicitação de Documentos Adicionais', 'solicitacao_docs', 'Solicita documentos adicionais para análise', 'solicitacao_documentos', 
--  '{"documentos": [{"nome": "Laudo Técnico", "descricao": "Laudo técnico emitido por profissional habilitado", "obrigatorio": true, "tipo": "pdf", "extensoes": ["pdf"]}, {"nome": "Fotos do Local", "descricao": "Fotografias do local do projeto", "obrigatorio": false, "tipo": "image", "extensoes": ["jpg", "jpeg", "png"]}], "prazoDias": 7, "mensagem": "Solicitamos os documentos adicionais para análise completa do projeto."}', 
--  '/Processos/{processoId}/Documentos/Solicitados', 1, 1);

-- 5. Comentários sobre a estrutura
/*
Estrutura das tabelas:

1. etapas_especiais:
   - Vincula etapas especiais a estados de workflow
   - Configuração JSON permite flexibilidade
   - Suporte a múltiplos tipos de etapas

2. solicitacoes_documentos:
   - Registra solicitações específicas para processos
   - Documentos solicitados armazenados como JSON
   - Rastreamento completo de status e prazos

3. Relacionamentos:
   - etapas_especiais -> estados_workflow (N:1)
   - solicitacoes_documentos -> processos (N:1)
   - solicitacoes_documentos -> etapas_especiais (N:1)
   - solicitacoes_documentos -> users (N:1) - solicitado_por
   - solicitacoes_documentos -> users (N:1) - concluido_por

4. Funcionalidades:
   - Configuração flexível de documentos solicitados
   - Controle de extensões permitidas
   - Rastreamento de status individual por documento
   - Integração com Alfresco para armazenamento
   - Sistema de validação de documentos
*/ 