-- =====================================================
-- ALTERAÇÃO DA TABELA DESPESAS PARA CAMPOS LIVRES
-- =====================================================

-- Adicionar novos campos de texto livre
ALTER TABLE despesas ADD COLUMN IF NOT EXISTS tipo_nome TEXT;
ALTER TABLE despesas ADD COLUMN IF NOT EXISTS fornecedor_nome TEXT;

-- Migrar dados existentes (se houver)
UPDATE despesas 
SET tipo_nome = (
    SELECT nome FROM tipos_despesas 
    WHERE tipos_despesas.id = despesas.tipo_despesa_id
)
WHERE tipo_despesa_id IS NOT NULL AND tipo_nome IS NULL;

UPDATE despesas 
SET fornecedor_nome = (
    SELECT razao_social FROM fornecedores 
    WHERE fornecedores.id = despesas.fornecedor_id
)
WHERE fornecedor_id IS NOT NULL AND fornecedor_nome IS NULL;

-- Remover as constraints das chaves estrangeiras (se existirem)
ALTER TABLE despesas DROP CONSTRAINT IF EXISTS despesas_tipo_despesa_id_fkey;
ALTER TABLE despesas DROP CONSTRAINT IF EXISTS despesas_fornecedor_id_fkey;

-- Tornar os campos antigos opcionais (para compatibilidade)
ALTER TABLE despesas ALTER COLUMN tipo_despesa_id DROP NOT NULL;

-- Criar índice nos novos campos para performance
CREATE INDEX IF NOT EXISTS idx_despesas_tipo_nome ON despesas(tipo_nome);
CREATE INDEX IF NOT EXISTS idx_despesas_fornecedor_nome ON despesas(fornecedor_nome);

-- Comentários para documentação
COMMENT ON COLUMN despesas.tipo_nome IS 'Nome do tipo de despesa (campo livre)';
COMMENT ON COLUMN despesas.fornecedor_nome IS 'Nome do fornecedor (campo livre)';
