from __future__ import annotations

from pydantic import field_validator
from pydantic_settings import BaseSettings, SettingsConfigDict


class Settings(BaseSettings):
    # الأمان
    SIGNAL_TOKEN: str  # مطلوب دائماً — غيابه يوقف التشغيل فوراً

    # مفاتيح Binance
    BINANCE_API_KEY: str = ""
    BINANCE_API_SECRET: str = ""

    # وضع التنفيذ
    TRADING_MODE: str = "SIMULATION"  # "SIMULATION" | "LIVE"

    # نظام الأسعار
    SYMBOLS: list[str] = ["BTCUSDT", "ETHUSDT"]
    UPDATE_INTERVAL: int = 2  # ثانية

    # إعادة المحاولة عند فشل الأوامر
    MAX_RETRIES: int = 3
    RETRY_DELAY: float = 2.0

    # الخادم
    HOST: str = "0.0.0.0"
    PORT: int = 9000
    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

    @field_validator("TRADING_MODE", mode="before")
    @classmethod
    def validate_mode(cls, v: str) -> str:
        v = v.upper()
        if v not in ("SIMULATION", "LIVE"):
            raise ValueError(f"TRADING_MODE must be SIMULATION or LIVE, got: {v}")
        return v


settings = Settings()
