-- =====================================================
-- SCRIPT COMPLETO: SISTEMA DE PARCELAS INDIVIDUAIS
-- Execute este script no Supabase SQL Editor
-- =====================================================

-- Verificar se a tabela já existe
DO $$ 
BEGIN
    IF EXISTS (SELECT FROM information_schema.tables WHERE table_name = 'venda_parcelas') THEN
        RAISE NOTICE '⚠️  Tabela venda_parcelas já existe. Pulando criação.';
    ELSE
        RAISE NOTICE '✅ Criando tabela venda_parcelas...';
    END IF;
END $$;

-- Criar tabela de parcelas
CREATE TABLE IF NOT EXISTS venda_parcelas (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    venda_id UUID NOT NULL REFERENCES vendas(id) ON DELETE CASCADE,
    numero_parcela INTEGER NOT NULL,
    valor DECIMAL(10,2) NOT NULL,
    data_vencimento DATE NOT NULL,
    status TEXT DEFAULT 'pendente' CHECK (status IN ('pendente', 'pago', 'vencida', 'cancelada')),
    data_pagamento TIMESTAMP WITH TIME ZONE,
    pix_payment_id TEXT,
    pix_qr_code TEXT,
    pix_qr_code_base64 TEXT,
    observacoes TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    UNIQUE(venda_id, numero_parcela)
);

-- Índices para performance
CREATE INDEX IF NOT EXISTS idx_venda_parcelas_venda ON venda_parcelas(venda_id);
CREATE INDEX IF NOT EXISTS idx_venda_parcelas_status ON venda_parcelas(status);
CREATE INDEX IF NOT EXISTS idx_venda_parcelas_vencimento ON venda_parcelas(data_vencimento);

-- Trigger para atualização automática do campo updated_at
DROP TRIGGER IF EXISTS update_venda_parcelas_updated_at ON venda_parcelas;
CREATE TRIGGER update_venda_parcelas_updated_at 
BEFORE UPDATE ON venda_parcelas 
FOR EACH ROW 
EXECUTE FUNCTION update_updated_at_column();

-- Habilitar Row Level Security
ALTER TABLE venda_parcelas ENABLE ROW LEVEL SECURITY;

-- Remover política antiga se existir
DROP POLICY IF EXISTS "Enable all operations for authenticated users" ON venda_parcelas;

-- Criar política de acesso (permitir todas operações)
CREATE POLICY "Enable all operations for authenticated users" 
ON venda_parcelas 
FOR ALL 
USING (true);

-- Comentários para documentação
COMMENT ON TABLE venda_parcelas IS 'Armazena as parcelas individuais de cada venda parcelada com controle de status e PIX';
COMMENT ON COLUMN venda_parcelas.numero_parcela IS 'Número sequencial da parcela (1, 2, 3, etc)';
COMMENT ON COLUMN venda_parcelas.valor IS 'Valor da parcela individual';
COMMENT ON COLUMN venda_parcelas.data_vencimento IS 'Data de vencimento da parcela';
COMMENT ON COLUMN venda_parcelas.status IS 'Status da parcela: pendente, pago, vencida, cancelada';
COMMENT ON COLUMN venda_parcelas.data_pagamento IS 'Data e hora em que a parcela foi paga';
COMMENT ON COLUMN venda_parcelas.pix_payment_id IS 'ID do pagamento PIX no MercadoPago';
COMMENT ON COLUMN venda_parcelas.pix_qr_code IS 'Código PIX para cópia e cola';
COMMENT ON COLUMN venda_parcelas.pix_qr_code_base64 IS 'QR Code em base64 para exibição';

-- =====================================================
-- VERIFICAÇÃO E DIAGNÓSTICO
-- =====================================================

-- Verificar se a tabela foi criada
DO $$ 
DECLARE
    table_count INTEGER;
    index_count INTEGER;
    policy_count INTEGER;
BEGIN
    -- Contar tabela
    SELECT COUNT(*) INTO table_count
    FROM information_schema.tables 
    WHERE table_name = 'venda_parcelas';
    
    -- Contar índices
    SELECT COUNT(*) INTO index_count
    FROM pg_indexes 
    WHERE tablename = 'venda_parcelas';
    
    -- Contar políticas
    SELECT COUNT(*) INTO policy_count
    FROM pg_policies 
    WHERE tablename = 'venda_parcelas';
    
    -- Exibir resultados
    RAISE NOTICE '========================================';
    RAISE NOTICE '✅ VERIFICAÇÃO DO SISTEMA DE PARCELAS';
    RAISE NOTICE '========================================';
    RAISE NOTICE 'Tabela venda_parcelas: % %', 
        CASE WHEN table_count > 0 THEN '✅ CRIADA' ELSE '❌ NÃO ENCONTRADA' END,
        CASE WHEN table_count > 0 THEN '' ELSE ' - Execute o script novamente!' END;
    RAISE NOTICE 'Índices criados: % índice(s)', index_count;
    RAISE NOTICE 'Políticas RLS: % política(s)', policy_count;
    RAISE NOTICE '========================================';
    
    IF table_count > 0 THEN
        RAISE NOTICE '🎉 Sistema de parcelas instalado com sucesso!';
        RAISE NOTICE '📝 Próximo passo: Reinicie o servidor Node.js';
        RAISE NOTICE '🚀 Depois: Teste criando uma venda parcelada';
    ELSE
        RAISE NOTICE '⚠️  Erro na instalação. Verifique as mensagens acima.';
    END IF;
    RAISE NOTICE '========================================';
END $$;

-- Verificar estrutura da tabela
SELECT 
    column_name as "Coluna",
    data_type as "Tipo",
    is_nullable as "Nullable"
FROM information_schema.columns
WHERE table_name = 'venda_parcelas'
ORDER BY ordinal_position;
