"""Configuration loader."""
import os
from pathlib import Path
from dotenv import load_dotenv

BASE_DIR = Path(__file__).resolve().parent.parent
load_dotenv(BASE_DIR / ".env")


def _get_bool(key: str, default: bool = False) -> bool:
    return os.getenv(key, str(default)).lower() in ("1", "true", "yes", "on")


def _get_int(key: str, default: int = 0) -> int:
    try:
        return int(os.getenv(key, str(default)))
    except (TypeError, ValueError):
        return default


BOT_TOKEN: str = (
    os.environ.get("BOT_TOKEN")
    or os.environ.get("TELEGRAM_BOT_TOKEN")
    or os.getenv("BOT_TOKEN", "")
    or os.getenv("TELEGRAM_BOT_TOKEN", "")
)
OWNER_ID: int = _get_int("OWNER_ID", 0)
DB_PATH: str = str(BASE_DIR / os.getenv("DB_PATH", "data/bobi.db"))
DATABASE_URL: str = os.getenv("DATABASE_URL", "")
LOG_CHANNEL: str = os.getenv("LOG_CHANNEL", "")

DEFAULT_WELCOME: str = os.getenv(
    "DEFAULT_WELCOME",
    "سلام {first}! 👋\nبه گروه <b>{chat}</b> خوش آمدی.",
)
DEFAULT_GOODBYE: str = os.getenv("DEFAULT_GOODBYE", "خداحافظ {first} 😢")
DEFAULT_RULES: str = os.getenv(
    "DEFAULT_RULES", "۱. احترام بذارید.\n۲. اسپم ممنوع.\n۳. لینک ممنوع."
)
DEFAULT_FLOOD_LIMIT: int = _get_int("DEFAULT_FLOOD_LIMIT", 10)
DEFAULT_FLOOD_MODE: str = os.getenv("DEFAULT_FLOOD_MODE", "mute")
DEFAULT_WARN_LIMIT: int = _get_int("DEFAULT_WARN_LIMIT", 3)
DEFAULT_WARN_MODE: str = os.getenv("DEFAULT_WARN_MODE", "ban")
DEFAULT_LANG: str = os.getenv("DEFAULT_LANG", "fa")

WEBHOOK_URL: str = os.getenv("WEBHOOK_URL", "")
WEBHOOK_PORT: int = _get_int("WEBHOOK_PORT", 8443)
WEBHOOK_LISTEN: str = os.getenv("WEBHOOK_LISTEN", "0.0.0.0")

LOG_LEVEL: str = os.getenv("LOG_LEVEL", "INFO")

PROXY_URL: str = os.getenv("PROXY_URL", "")

RATE_LIMIT_PER_SEC: int = _get_int("RATE_LIMIT_PER_SEC", 3)
RATE_LIMIT_PER_MIN: int = _get_int("RATE_LIMIT_PER_MIN", 30)
try:
    ANTISPAM_THRESHOLD: float = float(os.getenv("ANTISPAM_THRESHOLD", "7.0") or "7.0")
except ValueError:
    ANTISPAM_THRESHOLD = 7.0
ANTISPAM_ACTION: str = os.getenv("ANTISPAM_ACTION", "delete") or "delete"
CHANNEL_FORWARD_TARGET: int = _get_int("CHANNEL_FORWARD_TARGET", 0)
OPENWEATHER_API_KEY: str = os.getenv("OPENWEATHER_API_KEY", "")
OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "")
OPENROUTER_MODEL: str = os.getenv(
    "OPENROUTER_MODEL",
    "nousresearch/hermes-3-llama-3.1-405b:free",
)

if not BOT_TOKEN:
    raise ValueError(
        "❌ BOT_TOKEN is required. Please set BOT_TOKEN in .env file."
    )

if OWNER_ID == 0:
    import warnings
    warnings.warn("⚠️  OWNER_ID is not set. Some features will be limited.")
