/**
 * 🏦 Interface AccountPayable - Contas a Pagar
 * 
 * Interface expandida para compatibilidade com BaseDomainComponent
 * e recursos modernos do sistema de contas a pagar.
 */
export interface AccountPayable {
    // Campos básicos obrigatórios
    id: string;
    name: string;
    status: 'Pending' | 'Paid' | 'Cancelled' | 'Refused' |'Approved' |'AdvanceRequested'| 'AdvanceRefused' | 'AdvanceApproved'| 'ApprovedCustomer'| 'RequestAdvanceApproved' | 'RequestAdvanceRefused';
    
    // Campos financeiros (atualizados conforme backend)
    amount?: number;           // Mantido para compatibilidade
    total: number;             // Campo principal do backend
    chargeAmount?: number;     // Valor total da cobrança
    netAmount?: number;        // Valor líquido
    taxes?: number;            // Impostos
    discount?: number;         // Desconto aplicado
    interest?: number;         // Juros aplicados
    
    // Datas importantes (atualizadas conforme backend)
    due_date?: string;         // Formato original (deprecated)
    expiration_date: string;   // Campo principal do backend
    dueDate?: string;          // Data de vencimento (padronizada)
    paymentForecast?: string;  // Previsão de pagamento
    lastPayment?: string;      // Data do último pagamento
    
    // Informações do documento (atualizadas conforme backend)
    documentNumber?: string;   // Deprecated
    number_document: string;   // Campo principal do backend
    invoice?: string;          // Nota fiscal
    documentType?: 'invoice' | 'receipt' | 'contract' | 'other';
    
    // Fornecedor e relacionados (atualizados conforme backend)
    supplier?: string;         // Deprecated
    person_name: string;       // Campo principal do backend
    seller?: string;           // Vendedor responsável
    project?: string;          // Projeto relacionado
    
    // Categorização (atualizada conforme backend)
    category?: string;         // Deprecated
    category_name: CategoryType; // Campo principal do backend com tipos específicos
    accountType?: 'payable' | 'expense' | 'investment';
    
    // Parcelamento
    installments?: number;     // Número de parcelas

    // notas
    notes?: string;
    
    // Metadados
    created_at: string;
    updated_at: string;
    
    // Campos extras para compatibilidade
    salesPhotoIds?: string[];  // IDs das fotos/anexos
    attachments?: string[];    // Anexos/documentos
}

/**
 * 🎨 Tipos de Categoria com Ícones
 * Baseado na imagem fornecida com categorias visuais
 */
export type CategoryType = 
    | 'food_drinks'      // 🍽️ Food & Drinks (laranja)
    | 'transportation'   // 🚗 Transportation (azul)
    | 'shopping'         // 🛍️ Shopping (amarelo)
    | 'services'         // 🏪 Services (roxo)
    | 'health'           // ❤️ Health (vermelho)
    | 'entertainment'    // 🎭 Entertainment
    | 'education'        // 📚 Education
    | 'utilities'        // ⚡ Utilities
    | 'technology'       // 💻 Technology
    | 'travel'           // ✈️ Travel
    | 'office'           // 🏢 Office
    | 'maintenance'      // 🔧 Maintenance
    | 'uncategorized';   // ❓ Não classificado

/**
 * 🎨 Configuração de Categorias com Ícones e Cores
 */
export interface CategoryConfig {
    key: CategoryType;
    label: string;
    icon: string;
    color: string;
    bgColor: string;
    description: string;
}

/**
 * 🎨 Mapeamento de Categorias com Ícones
 */
export const CATEGORY_CONFIGS: CategoryConfig[] = [
    {
        key: 'uncategorized',
        label: 'Não classificado',
        icon: 'fa-question-circle',
        color: '#6c757d',
        bgColor: '#f8f9fa',
        description: 'Categoria não definida'
    },
    {
        key: 'food_drinks',
        label: 'Alimentação',
        icon: 'fa-utensils',
        color: '#ffffff',
        bgColor: '#fd7e14', // laranja
        description: 'Refeições, bebidas e alimentação'
    },
    {
        key: 'transportation',
        label: 'Transporte',
        icon: 'fa-car',
        color: '#ffffff',
        bgColor: '#007bff', // azul
        description: 'Combustível, manutenção veicular, pedágios'
    },
    {
        key: 'shopping',
        label: 'Compras',
        icon: 'fa-shopping-bag',
        color: '#ffffff', 
        bgColor: '#ffc107', // amarelo
        description: 'Materiais, equipamentos e suprimentos'
    },
    {
        key: 'services',
        label: 'Serviços',
        icon: 'fa-store',
        color: '#ffffff',
        bgColor: '#6f42c1', // roxo
        description: 'Serviços profissionais e terceirizados'
    },
    {
        key: 'health',
        label: 'Saúde',
        icon: 'fa-heart-pulse',
        color: '#ffffff',
        bgColor: '#dc3545', // vermelho
        description: 'Planos de saúde, medicamentos, exames'
    },
    {
        key: 'entertainment',
        label: 'Entretenimento',
        icon: 'fa-masks-theater',
        color: '#ffffff',
        bgColor: '#e83e8c', // rosa
        description: 'Eventos, lazer e entretenimento'
    },
    {
        key: 'education',
        label: 'Educação',
        icon: 'fa-graduation-cap',
        color: '#ffffff',
        bgColor: '#20c997', // verde água
        description: 'Cursos, treinamentos e capacitação'
    },
    {
        key: 'utilities',
        label: 'Utilidades',
        icon: 'fa-bolt',
        color: '#ffffff',
        bgColor: '#fd7e14', // laranja escuro
        description: 'Energia, água, telefone, internet'
    },
    {
        key: 'technology',
        label: 'Tecnologia',
        icon: 'fa-laptop',
        color: '#ffffff',
        bgColor: '#6610f2', // indigo
        description: 'Software, hardware e TI'
    },
    {
        key: 'travel',
        label: 'Viagens',
        icon: 'fa-plane',
        color: '#ffffff',
        bgColor: '#17a2b8', // ciano
        description: 'Hospedagem, passagens e viagens'
    },
    {
        key: 'office',
        label: 'Escritório',
        icon: 'fa-building',
        color: '#ffffff',
        bgColor: '#28a745', // verde
        description: 'Aluguel, móveis e materiais de escritório'
    },
    {
        key: 'maintenance',
        label: 'Manutenção',
        icon: 'fa-tools',
        color: '#ffffff',
        bgColor: '#495057', // cinza escuro
        description: 'Reparos e manutenção geral'
    }
];

/**
 * 📊 Interface AccountPayableItem - Itens de Composição da Conta a Pagar
 * 
 * Representa os itens individuais que compõem uma conta a pagar,
 * incluindo descontos, acréscimos e detalhes de cada parcela.
 */
export interface AccountPayableItem {
    id: number;
    discount: number;           // Desconto aplicado
    addition: number;           // Acréscimo/taxa adicional
    value: number;              // Valor original do item
    total: number;              // Valor final (value - discount + addition)
    status: 'Pending' | 'Paid' | 'Cancelled';  // Status do item
    notes: string;              // Observações e detalhes
    createdAt: string;          // Data de criação
    updateddAt: string;         // Data de atualização
    paidAt: string | null;      // Data de pagamento (se aplicável)
}

/**
 * 📋 Interface para Response da API de Account Payable Item
 * Estrutura: response.data.accountPayableItem
 */
export interface AccountPayableItemResponse {
    data: {
        accountPayableItem: AccountPayableItem[];
        // Outros campos da conta a pagar poderiam estar aqui também
        id?: number;
        expiration_date?: string;
        number_document?: string;
        person_name?: string;
        status?: string;
        total?: number;
        [key: string]: any; // Para outros campos opcionais
    };
}

