import { useState, useMemo } from 'react';

// Mock Transactions (Entradas focus) com datas padronizadas
const MOCK_TRANSACTIONS = Array.from({ length: 50 }, (_, i) => {
    const day = String((i % 30) + 1).padStart(2, '0');
    return {
        id: `REC-${2000 + i}`,
        dataEntrada: `2026-01-${day}`,
        descricao: i % 2 === 0 ? `Pagamento Boleto ${i}` : `Serviço Consultoria ${i}`,
        cliente: i % 3 === 0 ? 'Cliente A LTDA' : (i % 3 === 1 ? 'B Services' : 'Cliente C Comércio'),
        categoria: ['Venda de Produto', 'Serviços', 'Receita Financeira', 'Outros'][i % 4],
        valor: (Math.random() * 3000 + 500).toFixed(2),
        status: i % 4 === 0 ? 'Pendente' : 'Recebido'
    };
}).map(item => ({
    ...item,
    valor: parseFloat(item.valor)
}));

// Mock Clients
const MOCK_CLIENTS = [
    {
        id: 1, nome: 'Cliente A LTDA', email: 'contato@cliente-a.com', status_serv: 'Ativo', telefone: '(11) 9999-9999',
        nome_exibicao: 'Cliente A', caixinha: '1', cpf_cnpj: '12.345.678/0001-90', endereco: 'Rua das Flores, 123',
        bairro: 'Centro', cidade: 'São Paulo', uf: 'SP', cep: '01234-567', dominio: 'cliente-a.com.br', tipo_pessoa: 'JURIDICA',
        data_vencimento: 10, obs: 'Cliente premium desde 2020', valor_servico: 500.00
    },
    {
        id: 2, nome: 'B Services', email: 'admin@cliente-b.br', status_serv: 'Inativo', telefone: '(21) 8888-8888',
        nome_exibicao: 'B Services', caixinha: '2', cpf_cnpj: '98.765.432/0001-11', endereco: 'Av. Brasil, 500',
        bairro: 'Copacabana', cidade: 'Rio de Janeiro', uf: 'RJ', cep: '20000-000', dominio: 'bservices.com', tipo_pessoa: 'JURIDICA',
        data_vencimento: 15, obs: 'Aguardando renovação', valor_servico: 750.00
    },
];

// Mock Services
const MOCK_SERVICES = [
    { idservicos: 1, servico: 'Suporte Técnico', valor: 750.00 },
    { idservicos: 2, servico: 'VPS Custom', valor: 300.00 },
];

export const useContasReceber = () => {
    const [activeTab, setActiveTab] = useState('registros'); // 'registros' | 'cruzamento'
    const [transactions] = useState(MOCK_TRANSACTIONS);
    const [clients] = useState(MOCK_CLIENTS);
    const [services] = useState(MOCK_SERVICES);
    const [activePanel, setActivePanel] = useState(null); // null | 'client' | 'service'

    // Derived States seguros
    const totalRecebido = useMemo(() => {
        if (!Array.isArray(transactions)) return 0;
        return transactions
            .filter(t => t?.status === 'Recebido')
            .reduce((acc, t) => acc + (t?.valor || 0), 0);
    }, [transactions]);

    const totalPendente = useMemo(() => {
        if (!Array.isArray(transactions)) return 0;
        return transactions
            .filter(t => t?.status === 'Pendente')
            .reduce((acc, t) => acc + (t?.valor || 0), 0);
    }, [transactions]);

    const totalGeral = totalRecebido + totalPendente;

    // Actions
    const togglePanel = (panelName) => {
        setActivePanel(current => current === panelName ? null : panelName);
    };

    const closePanel = () => setActivePanel(null);

    return {
        state: {
            activeTab,
            transactions: transactions || [],
            clients: clients || [],
            services: services || [],
            activePanel,
            kpis: {
                totalRecebido,
                totalPendente,
                totalGeral 
            }
        },
        actions: {
            setActiveTab,
            togglePanel,
            closePanel,
        }
    };
};
