from __future__ import annotations

from dataclasses import dataclass


@dataclass(frozen=True)
class AlertPlan:
    text: str
    destination_topic: str = "Crypto Trading Bot"
    side_effects: tuple[str, ...] = ()


def _mode_label(*, dry_run: bool, paper_trading: bool = False) -> str:
    if dry_run:
        return "DRY-RUN"
    if paper_trading:
        return "PAPER"
    return "LIVE"


def build_trade_alert(*, event_type: str, coin: str, side: str, price: float, size: float, dry_run: bool, paper_trading: bool = False, reason: str = "", realized_pnl_usd: float | None = None) -> AlertPlan:
    mode = _mode_label(dry_run=dry_run, paper_trading=paper_trading)
    label = event_type.upper()
    pnl = "" if realized_pnl_usd is None else f" | PnL: {realized_pnl_usd:+.4f} USDC"
    text = f"Crypto Bot {label} [{mode}] {coin.upper()} {side} size={size:g} price={price:g} reason={reason}{pnl}"
    return AlertPlan(text=text)


def build_risk_alert(*, reason: str, dry_run: bool, paper_trading: bool = False) -> AlertPlan:
    mode = _mode_label(dry_run=dry_run, paper_trading=paper_trading)
    return AlertPlan(text=f"Crypto Bot Risk Gate [{mode}] blockiert neue Entries: {reason}")
