-- Adicionar status 'arquivado' aos projetos
ALTER TABLE projetos DROP CONSTRAINT IF EXISTS projetos_status_check;
ALTER TABLE projetos ADD CONSTRAINT projetos_status_check 
  CHECK (status IN ('rascunho', 'em_andamento', 'revisao', 'finalizado', 'cancelado', 'arquivado'));

-- Adicionar campo 'ativo' à tabela templates_topicos (soft delete)
ALTER TABLE templates_topicos ADD COLUMN IF NOT EXISTS ativo BOOLEAN DEFAULT TRUE;
CREATE INDEX IF NOT EXISTS idx_topicos_ativo ON templates_topicos(ativo);

-- Adicionar campo 'inativado_em' para rastreamento
ALTER TABLE templates_topicos ADD COLUMN IF NOT EXISTS inativado_em TIMESTAMP;
ALTER TABLE templates_customizados ADD COLUMN IF NOT EXISTS inativado_em TIMESTAMP;

-- Comentários explicativos
COMMENT ON COLUMN templates_topicos.ativo IS 'Soft delete: FALSE oculta o tópico de novas criações mas mantém em databooks existentes';
COMMENT ON COLUMN templates_customizados.ativo IS 'Soft delete: FALSE oculta o template de novas criações mas mantém em databooks existentes';

-- Criar função para "soft delete" de templates
CREATE OR REPLACE FUNCTION soft_delete_template()
RETURNS TRIGGER AS $$
BEGIN
  -- Ao invés de deletar, marca como inativo
  UPDATE templates_customizados 
  SET ativo = FALSE, inativado_em = NOW()
  WHERE id = OLD.id;
  
  -- Impede a exclusão física
  RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Criar trigger para soft delete de templates
DROP TRIGGER IF EXISTS prevent_template_hard_delete ON templates_customizados;
CREATE TRIGGER prevent_template_hard_delete
  BEFORE DELETE ON templates_customizados
  FOR EACH ROW
  EXECUTE FUNCTION soft_delete_template();

-- Criar função para "soft delete" de tópicos
CREATE OR REPLACE FUNCTION soft_delete_topico()
RETURNS TRIGGER AS $$
BEGIN
  -- Ao invés de deletar, marca como inativo
  UPDATE templates_topicos 
  SET ativo = FALSE, inativado_em = NOW()
  WHERE id = OLD.id;
  
  -- Impede a exclusão física
  RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Criar trigger para soft delete de tópicos
DROP TRIGGER IF EXISTS prevent_topico_hard_delete ON templates_topicos;
CREATE TRIGGER prevent_topico_hard_delete
  BEFORE DELETE ON templates_topicos
  FOR EACH ROW
  EXECUTE FUNCTION soft_delete_topico();
