from __future__ import annotations

from dataclasses import dataclass
from pathlib import Path

from config import BotConfig


@dataclass(frozen=True)
class RiskDecision:
    allowed: bool
    reason: str = "ok"


def risk_gate(*, daily_pnl_usd: float, daily_trade_count: int, kill_switch_path: str | Path, cfg: BotConfig) -> RiskDecision:
    path = Path(kill_switch_path).expanduser()
    if path.exists():
        return RiskDecision(False, "kill_switch")
    if daily_pnl_usd <= -abs(cfg.max_daily_loss_usd):
        return RiskDecision(False, "daily_loss_limit")
    if daily_trade_count >= cfg.max_daily_trades:
        return RiskDecision(False, "daily_trade_limit")
    return RiskDecision(True)
