from dataclasses import dataclass
from pathlib import Path
import os

from dotenv import load_dotenv


BASE_DIR = Path(__file__).resolve().parents[1]
load_dotenv(BASE_DIR / "config" / ".env")
load_dotenv(Path.cwd() / ".env")


def _bool_env(name: str, default: bool = False) -> bool:
    value = os.getenv(name)
    if value is None:
        return default
    return value.strip().lower() in {"1", "true", "yes", "on"}


@dataclass(frozen=True)
class Config:
    app_env: str = os.getenv("APP_ENV", "production")
    trading_mode: str = os.getenv("TRADING_MODE", "paper").lower()
    db_host: str = os.getenv("DB_HOST", "127.0.0.1")
    db_port: int = int(os.getenv("DB_PORT", "3306"))
    db_name: str = os.getenv("DB_NAME", "delta_pump_reversal")
    db_user: str = os.getenv("DB_USER", "delta_user")
    db_password: str = os.getenv("DB_PASSWORD", "")
    delta_api_base: str = os.getenv("DELTA_API_BASE", "https://api.delta.exchange")
    delta_ws_url: str = os.getenv("DELTA_WS_URL", "wss://socket.delta.exchange")
    delta_api_key: str = os.getenv("DELTA_API_KEY", "")
    delta_api_secret: str = os.getenv("DELTA_API_SECRET", "")
    telegram_bot_token: str = os.getenv("TELEGRAM_BOT_TOKEN", "")
    telegram_chat_id: str = os.getenv("TELEGRAM_CHAT_ID", "")
    log_level: str = os.getenv("LOG_LEVEL", "INFO")
    enable_live_trading: bool = _bool_env("ENABLE_LIVE_TRADING", False)
    tick_retention_minutes: int = int(os.getenv("TICK_RETENTION_MINUTES", "720"))
    scan_interval_seconds: float = float(os.getenv("SCAN_INTERVAL_SECONDS", "2"))

    @property
    def is_paper_only(self) -> bool:
        return self.trading_mode != "live" or not self.enable_live_trading


config = Config()

