-- =============================================
-- CORRIGIR TODAS AS TABELAS FALTANTES - SOLUÇÃO FINAL
-- =============================================

-- 1. Criar tabela de tipos de despesas
CREATE TABLE IF NOT EXISTS tipos_despesa (
    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
    nome VARCHAR(255) NOT NULL UNIQUE,
    descricao TEXT,
    ativo BOOLEAN DEFAULT true,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Inserir tipos de despesas padrão
INSERT INTO tipos_despesa (nome, descricao) VALUES
('Aluguel', 'Despesas com aluguel do estabelecimento'),
('Energia', 'Conta de energia elétrica'),
('Água', 'Conta de água'),
('Internet', 'Despesas com internet e telefone'),
('Marketing', 'Despesas com publicidade e marketing'),
('Transporte', 'Despesas com transporte e combustível'),
('Material', 'Material de escritório e loja'),
('Manutenção', 'Manutenção e reparos'),
('Outros', 'Outras despesas diversas')
ON CONFLICT (nome) DO NOTHING;

-- 2. Criar tabela de empréstimos
CREATE TABLE IF NOT EXISTS emprestimos (
    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
    cliente_id UUID REFERENCES clientes(id),
    data_emprestimo DATE NOT NULL,
    data_devolucao_prevista DATE NOT NULL,
    data_devolucao_real DATE,
    observacoes TEXT,
    status VARCHAR(20) DEFAULT 'ativo' CHECK (status IN ('ativo', 'devolvido', 'cancelado')),
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 3. Criar tabela de itens de empréstimo
CREATE TABLE IF NOT EXISTS emprestimo_itens (
    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
    emprestimo_id UUID REFERENCES emprestimos(id) ON DELETE CASCADE,
    produto_id UUID REFERENCES produtos(id),
    produto_variacao_id UUID REFERENCES produto_variacoes(id),
    quantidade INTEGER NOT NULL,
    observacoes TEXT,
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 4. Criar tabela de configurações
CREATE TABLE IF NOT EXISTS configuracoes (
    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
    chave VARCHAR(255) NOT NULL UNIQUE,
    valor TEXT,
    descricao TEXT,
    tipo VARCHAR(50) DEFAULT 'string',
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
    updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- Inserir configurações básicas
INSERT INTO configuracoes (chave, valor, descricao, tipo) VALUES
('evolution_api_url', '', 'URL da API Evolution', 'string'),
('evolution_api_key', '', 'Chave da API Evolution', 'string'),
('whatsapp_alertas_ativo', 'false', 'Ativar alertas WhatsApp', 'boolean'),
('whatsapp_primeiro_alerta_dias', '3', 'Dias antes para primeiro alerta', 'number'),
('whatsapp_segundo_alerta_dias', '0', 'Dias antes para segundo alerta', 'number'),
('whatsapp_alerta_pos_vencimento_dias', '3', 'Dias após vencimento para alerta', 'number')
ON CONFLICT (chave) DO NOTHING;

-- 5. Verificar se existe a coluna foto_principal na tabela produtos
DO $$ 
BEGIN
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'produtos' AND column_name = 'foto_principal') THEN
        ALTER TABLE produtos ADD COLUMN foto_principal TEXT;
    END IF;
END $$;

-- 6. Verificar se a tabela despesas tem as colunas corretas
DO $$ 
BEGIN
    -- Verificar se existe coluna tipo_id
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'despesas' AND column_name = 'tipo_id') THEN
        ALTER TABLE despesas ADD COLUMN tipo_id UUID REFERENCES tipos_despesa(id);
    END IF;
    
    -- Verificar se existe coluna fornecedor_id
    IF NOT EXISTS (SELECT 1 FROM information_schema.columns 
                   WHERE table_name = 'despesas' AND column_name = 'fornecedor_id') THEN
        ALTER TABLE despesas ADD COLUMN fornecedor_id UUID REFERENCES fornecedores(id);
    END IF;
END $$;

-- 7. Criar índices para melhor performance
CREATE INDEX IF NOT EXISTS idx_tipos_despesa_nome ON tipos_despesa(nome);
CREATE INDEX IF NOT EXISTS idx_emprestimos_cliente ON emprestimos(cliente_id);
CREATE INDEX IF NOT EXISTS idx_emprestimos_status ON emprestimos(status);
CREATE INDEX IF NOT EXISTS idx_emprestimos_data ON emprestimos(data_emprestimo);
CREATE INDEX IF NOT EXISTS idx_configuracoes_chave ON configuracoes(chave);
CREATE INDEX IF NOT EXISTS idx_despesas_tipo ON despesas(tipo_id);
CREATE INDEX IF NOT EXISTS idx_despesas_fornecedor ON despesas(fornecedor_id);
CREATE INDEX IF NOT EXISTS idx_despesas_data ON despesas(data_despesa);

-- 8. Verificar criação das tabelas
SELECT 'VERIFICAÇÃO DAS TABELAS CRIADAS:' as status;

SELECT 
    table_name,
    CASE 
        WHEN table_name IN (
            SELECT table_name 
            FROM information_schema.tables 
            WHERE table_schema = 'public'
        ) THEN '✅ Existe'
        ELSE '❌ Não existe'
    END as status
FROM (
    VALUES 
        ('tipos_despesa'),
        ('emprestimos'),
        ('emprestimo_itens'),
        ('configuracoes'),
        ('despesas'),
        ('clientes'),
        ('produtos'),
        ('fornecedores')
) AS t(table_name)
ORDER BY table_name;

-- 9. Verificar dados inseridos
SELECT 'Tipos de despesas cadastrados:' as info, COUNT(*) as total FROM tipos_despesa;
SELECT 'Configurações cadastradas:' as info, COUNT(*) as total FROM configuracoes;

SELECT '🎉 SETUP COMPLETO! Todas as tabelas foram criadas/verificadas.' as resultado;
