-- Migration: Substituir campo BI por tipo_documento e numero_documento
-- Adicionar constraints UNIQUE para numero_documento, phone e email
-- Tornar email opcional

-- 1. Adicionar novos campos
ALTER TABLE users 
ADD COLUMN IF NOT EXISTS tipo_documento VARCHAR(20),
ADD COLUMN IF NOT EXISTS numero_documento VARCHAR(50);

-- 2. Migrar dados existentes de BI para numero_documento (se houver)
-- Assumir que BI existente é do tipo "BI"
UPDATE users 
SET tipo_documento = 'BI', numero_documento = bi 
WHERE bi IS NOT NULL AND bi != '' AND numero_documento IS NULL;

-- 3. Remover constraint NOT NULL do email (se existir)
ALTER TABLE users 
ALTER COLUMN email DROP NOT NULL;

-- 4. Adicionar constraint UNIQUE para numero_documento (apenas valores não nulos)
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_numero_documento_unique 
ON users(numero_documento) 
WHERE numero_documento IS NOT NULL;

-- 5. Adicionar constraint UNIQUE para phone (apenas valores não nulos)
CREATE UNIQUE INDEX IF NOT EXISTS idx_users_phone_unique 
ON users(phone) 
WHERE phone IS NOT NULL;

-- 6. Verificar se email já tem constraint UNIQUE, se não, adicionar
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint 
        WHERE conname = 'users_email_key' 
        AND conrelid = 'users'::regclass
    ) THEN
        CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email_unique 
        ON users(email) 
        WHERE email IS NOT NULL;
    END IF;
END $$;

-- 7. Remover coluna bi após migração (comentado por segurança - descomentar após verificar migração)
-- ALTER TABLE users DROP COLUMN IF EXISTS bi;

-- 8. Adicionar constraint CHECK para tipo_documento válido
ALTER TABLE users 
ADD CONSTRAINT IF NOT EXISTS check_tipo_documento_valido 
CHECK (tipo_documento IS NULL OR tipo_documento IN ('BI', 'PASSAPORTE', 'DIRE', 'CARTA_CONDUCAO', 'OUTRO'));

-- 9. Comentários para documentação
COMMENT ON COLUMN users.tipo_documento IS 'Tipo de documento de identificação moçambicano: BI, PASSAPORTE, DIRE, CARTA_CONDUCAO, OUTRO';
COMMENT ON COLUMN users.numero_documento IS 'Número do documento de identificação (único, formato validado conforme tipo)';
COMMENT ON COLUMN users.phone IS 'Número de contacto (único)';
COMMENT ON COLUMN users.email IS 'Email (único, opcional)';









