-- Script para criar tabelas de parecer
-- Execute este script no banco de dados

-- 1. Criar tabela tipos_parecer
CREATE TABLE `tipos_parecer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  `codigo` varchar(50) NOT NULL UNIQUE,
  `descricao` text DEFAULT NULL,
  `template_id` int(11) NOT NULL,
  `layout_id` int(11) NOT NULL,
  `configuracao` json DEFAULT NULL,
  `ativo` tinyint(1) NOT NULL DEFAULT 1,
  `obrigatorio` tinyint(1) NOT NULL DEFAULT 0,
  `prazo_dias` int(11) 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_codigo` (`codigo`),
  KEY `idx_ativo` (`ativo`),
  FOREIGN KEY (`template_id`) REFERENCES `templates_documento` (`id`) ON DELETE RESTRICT,
  FOREIGN KEY (`layout_id`) REFERENCES `layouts_documento` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 2. Criar tabela pareceres
CREATE TABLE `pareceres` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `processo_id` int(11) NOT NULL,
  `etapa_especial_id` int(11) NOT NULL,
  `tipo_parecer_id` int(11) NOT NULL,
  `conteudo_html` longtext NOT NULL,
  `conteudo_texto` text DEFAULT NULL,
  `status` enum('rascunho','em_revisao','aprovado','rejeitado') NOT NULL DEFAULT 'rascunho',
  `responsavel_id` int(11) NOT NULL,
  `revisor_id` int(11) DEFAULT NULL,
  `data_aprovacao` timestamp NULL DEFAULT NULL,
  `observacoes` text DEFAULT NULL,
  `caminho_pdf` varchar(500) DEFAULT NULL,
  `dados_adicionais` json DEFAULT NULL,
  `data_limite` 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_etapa` (`processo_id`, `etapa_especial_id`),
  KEY `idx_status` (`status`),
  KEY `idx_responsavel` (`responsavel_id`),
  KEY `idx_revisor` (`revisor_id`),
  KEY `idx_data_limite` (`data_limite`),
  UNIQUE KEY `uk_processo_etapa` (`processo_id`, `etapa_especial_id`),
  FOREIGN KEY (`processo_id`) REFERENCES `processos` (`id`) ON DELETE CASCADE,
  FOREIGN KEY (`etapa_especial_id`) REFERENCES `etapas_especiais` (`id`) ON DELETE CASCADE,
  FOREIGN KEY (`tipo_parecer_id`) REFERENCES `tipos_parecer` (`id`) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 3. Inserir dados de exemplo para tipos de parecer
INSERT INTO `tipos_parecer` (`nome`, `codigo`, `descricao`, `template_id`, `layout_id`, `configuracao`, `ativo`, `obrigatorio`, `prazo_dias`) VALUES
('Parecer Técnico', 'parecer_tecnico', 'Parecer técnico padrão para análise de projetos', 1, 1, '{"responsavelObrigatorio": true, "revisaoObrigatoria": true, "prazoDias": 5, "permiteRascunho": true, "notificacoes": {"criacao": true, "revisao": true, "aprovacao": true}, "camposAdicionais": [{"nome": "conclusao", "tipo": "textarea", "obrigatorio": true, "label": "Conclusão do Parecer"}, {"nome": "recomendacoes", "tipo": "textarea", "obrigatorio": false, "label": "Recomendações"}]}', 1, 1, 5),
('Parecer Jurídico', 'parecer_juridico', 'Parecer jurídico para análise legal', 1, 1, '{"responsavelObrigatorio": true, "revisaoObrigatoria": true, "prazoDias": 7, "permiteRascunho": true, "notificacoes": {"criacao": true, "revisao": true, "aprovacao": true}, "camposAdicionais": [{"nome": "fundamentacao", "tipo": "textarea", "obrigatorio": true, "label": "Fundamentação Legal"}, {"nome": "riscos", "tipo": "textarea", "obrigatorio": false, "label": "Riscos Identificados"}]}', 1, 1, 7);

-- 4. Criar índices adicionais para performance
CREATE INDEX `idx_pareceres_criado_em` ON `pareceres` (`criado_em`);
CREATE INDEX `idx_pareceres_tipo_parecer` ON `pareceres` (`tipo_parecer_id`);
CREATE INDEX `idx_tipos_parecer_template` ON `tipos_parecer` (`template_id`);
CREATE INDEX `idx_tipos_parecer_layout` ON `tipos_parecer` (`layout_id`);

-- 5. Comentários sobre a estrutura
-- A tabela tipos_parecer referencia templates_documento com categoria 'parecer'
-- A tabela pareceres tem relacionamento único com processo + etapa_especial
-- O campo status controla o fluxo de aprovação
-- O campo dados_adicionais permite campos customizados por tipo de parecer 