from __future__ import annotations

from src.ctb_copy.models import CopyCostBreakdown, CopyCostInput


def estimate_follower_net_pnl(item: CopyCostInput) -> CopyCostBreakdown:
    """Apply the mandated conservative copytrading follower-PnL formula.

    follower_net_pnl = gross_pnl - entry_fee - exit_fee - spread_cost
                       - modeled_slippage - funding - delay_penalty
    """

    pct_divisor = item.notional_usd / 100
    entry_fee = pct_divisor * item.entry_fee_pct
    exit_fee = pct_divisor * item.exit_fee_pct
    spread_cost = pct_divisor * item.spread_pct
    slippage = pct_divisor * item.modeled_slippage_pct
    net = item.gross_pnl_usd - entry_fee - exit_fee - spread_cost - slippage - item.funding_usd - item.delay_penalty_usd
    return CopyCostBreakdown(
        gross_pnl_usd=item.gross_pnl_usd,
        entry_fee_usd=entry_fee,
        exit_fee_usd=exit_fee,
        spread_cost_usd=spread_cost,
        modeled_slippage_usd=slippage,
        funding_usd=item.funding_usd,
        delay_penalty_usd=item.delay_penalty_usd,
        net_pnl_usd=net,
    )
