// calculos.js - Funções Financeiras e Cálculos de P&L

const Calculos = {
    // BR-01: Cálculo de Preço Médio Ponderado
    calcularPrecoMedio(qtdAtual, precoMedioAtual, qtdNova, precoUnitarioNovo, taxas = 0) {
        if (qtdAtual === 0) return (precoUnitarioNovo + (taxas / qtdNova));
        
        const valorAtual = qtdAtual * precoMedioAtual;
        const valorNovo = (qtdNova * precoUnitarioNovo) + taxas;
        const qtdTotal = qtdAtual + qtdNova;
        
        return (valorAtual + valorNovo) / qtdTotal;
    },

    // Cálculo de Lucro/Prejuízo Não Realizado (Unrealized P&L) para Ações
    calcularPnLNaoRealizado(qtdTotal, precoMedio, precoAtual) {
        if (!precoAtual || precoAtual <= 0) return 0;
        const valorInvestido = qtdTotal * precoMedio;
        const valorAtual = qtdTotal * precoAtual;
        return valorAtual - valorInvestido;
    },

    // Cálculo de Rentabilidade (%) de um ativo
    calcularRentabilidadePercentual(precoMedio, precoAtual) {
        if (!precoMedio || precoMedio <= 0 || !precoAtual || precoAtual <= 0) return 0;
        return ((precoAtual / precoMedio) - 1) * 100;
    },

    // BR-03: Cálculo de Lucro/Prejuízo Realizado (Realized P&L) na Venda
    calcularPnLRealizado(qtdVendida, precoMedio, precoVenda, taxas = 0) {
        const valorVenda = qtdVendida * precoVenda;
        const custoBase = qtdVendida * precoMedio;
        return (valorVenda - custoBase) - taxas;
    },

    // Cálculo de P&L para Venda Coberta (Opções)
    calcularPnLOpcoes(tipoFechamento, premioRecebido, precoRecompra = 0, qtdContratos) {
        // 1 contrato = 100 ações
        const multiplicador = 100;
        const totalRecebido = premioRecebido * qtdContratos * multiplicador;
        
        if (tipoFechamento === 'VENCIDA') {
            // Virou pó - 100% de lucro sobre o prêmio
            return totalRecebido;
        } else if (tipoFechamento === 'EXERCIDA') {
            // Foi exercida - o lucro da opção é o prêmio recebido
            // O lucro da venda da ação será calculado separado no módulo de ações
            return totalRecebido;
        } else if (tipoFechamento === 'FECHADA') {
            // Recomprada - Lucro = Prêmio Recebido - Custo de Recompra
            const totalPago = precoRecompra * qtdContratos * multiplicador;
            return totalRecebido - totalPago;
        }
        return 0;
    },

    // BR-04: Cálculo de Imposto de Renda (15% padrão para Swing Trade / Venda Coberta)
    calcularIR(lucroBruto, isDayTrade = false) {
        if (lucroBruto <= 0) return 0; // Não tem IR sobre prejuízo
        
        const aliquota = isDayTrade ? 0.20 : 0.15;
        return lucroBruto * aliquota;
    },

    // Cálculo do ROA (Return on Assets) - Simplificado
    calcularROA(lucroTotal, totalInvestido) {
        if (totalInvestido <= 0) return 0;
        return (lucroTotal / totalInvestido) * 100;
    },

    // Formatar valor para moeda BRL (R$)
    formatarMoeda(valor) {
        return new Intl.NumberFormat('pt-BR', {
            style: 'currency',
            currency: 'BRL'
        }).format(valor || 0);
    },

    // Formatar percentual (%)
    formatarPercentual(valor) {
        return new Intl.NumberFormat('pt-BR', {
            style: 'percent',
            minimumFractionDigits: 2,
            maximumFractionDigits: 2
        }).format((valor || 0) / 100);
    }
};

// Se estiver usando ES Modules (export default Calculos)
// Mas como estamos usando via tag <script>, ele fica no escopo global
