-- Limpar registros duplicados na tabela configuracoes antes de adicionar constraint UNIQUE

-- 1. Ver quais registros estão duplicados
SELECT tipo, COUNT(*) as total
FROM public.configuracoes
GROUP BY tipo
HAVING COUNT(*) > 1;

-- 2. Remover duplicados, mantendo apenas o mais recente de cada tipo
DELETE FROM public.configuracoes
WHERE id IN (
    SELECT id
    FROM (
        SELECT id, tipo,
               ROW_NUMBER() OVER (PARTITION BY tipo ORDER BY updated_at DESC, created_at DESC) as rn
        FROM public.configuracoes
    ) t
    WHERE rn > 1
);

-- 3. Verificar se ainda existem duplicados (deve retornar vazio)
SELECT tipo, COUNT(*) as total
FROM public.configuracoes
GROUP BY tipo
HAVING COUNT(*) > 1;

-- 4. Agora adicionar a constraint UNIQUE
DO $$ 
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint 
        WHERE conname = 'configuracoes_tipo_key' 
        AND conrelid = 'public.configuracoes'::regclass
    ) THEN
        ALTER TABLE public.configuracoes ADD CONSTRAINT configuracoes_tipo_key UNIQUE (tipo);
        RAISE NOTICE 'Constraint UNIQUE adicionada com sucesso!';
    ELSE
        RAISE NOTICE 'Constraint UNIQUE já existe.';
    END IF;
END $$;

-- 5. Verificar o resultado final
SELECT * FROM public.configuracoes ORDER BY tipo;
