from __future__ import annotations

from pydantic import field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    # اتصال execution-bot
    EXECUTION_BOT_URL: str = "http://localhost:9000"
    EXECUTION_BOT_TOKEN: str  # مطلوب — نفس SIGNAL_TOKEN للـ execution-bot

    # منطق القرار
    DECISION_THRESHOLD: float = 0.3   # score > 0.3 → BUY، score < -0.3 → SELL
    SIGNAL_WINDOW: int = 10           # ثانية — نافذة تجميع الإشارات

    # إدارة المخاطر
    INITIAL_BALANCE: float = 1000.0   # الرصيد الابتدائي بالـ USDT
    RISK_PER_TRADE: float = 0.02      # 2% من الرصيد لكل صفقة
    TAKE_PROFIT_PCT: float = 0.03     # 3% ربح
    STOP_LOSS_PCT: float = 0.015      # 1.5% خسارة

    # العملات المتابَعة
    SYMBOLS: list[str] = ["BTCUSDT", "ETHUSDT"]

    # مراقبة الصفقات
    MONITOR_INTERVAL: int = 3         # ثانية بين كل فحص لـ TP/SL

    # الخادم
    HOST: str = "0.0.0.0"
    PORT: int = 9001
    LOG_LEVEL: str = "INFO"

    model_config = SettingsConfigDict(env_file=".env", extra="ignore")

    @field_validator("SYMBOLS", mode="before")
    @classmethod
    def parse_symbols(cls, v: object) -> list[str]:
        if isinstance(v, str):
            return [s.strip().upper() for s in v.split(",") if s.strip()]
        if isinstance(v, list):
            return [s.upper() for s in v]
        return v


settings = Settings()
