from __future__ import annotations
import os
from dataclasses import dataclass, field
from typing import List
from dotenv import load_dotenv

_STT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_PROJECT_ROOT = os.path.dirname(os.path.dirname(_STT_DIR))
_BACKEND_ENV = os.path.join(_PROJECT_ROOT, "dashboard-backend", ".env")
_STT_ENV = os.path.join(_STT_DIR, ".env")

# Load backend + STT env regardless of process cwd (systemd uses repo root).
load_dotenv(_BACKEND_ENV)
load_dotenv(_STT_ENV, override=True)

@dataclass
class Settings:
    db_host: str = field(default_factory=lambda: os.environ["DB_HOST"])
    db_port: int = field(default_factory=lambda: int(os.getenv("DB_PORT", "3306")))
    db_user: str = field(default_factory=lambda: os.environ["DB_USER"])
    db_password: str = field(default_factory=lambda: os.environ["DB_PASSWORD"])
    db_name: str = field(default_factory=lambda: os.environ["DB_NAME"])
    sarvam_subscription_key: str = field(default_factory=lambda: os.environ["SARVAM_SUBSCRIPTION_KEY"])
    poll_interval_seconds: int = field(default_factory=lambda: int(os.getenv("POLL_INTERVAL_SECONDS", "30")))
    batch_size: int = field(default_factory=lambda: int(os.getenv("BATCH_SIZE", "10")))
    max_retries: int = field(default_factory=lambda: int(os.getenv("MAX_RETRIES", "3")))
    bid_whitelist: List[str] = field(
        default_factory=lambda: [b.strip() for b in os.getenv("BID_WHITELIST", "").split(",") if b.strip()]
    )
    log_level: str = field(default_factory=lambda: os.getenv("LOG_LEVEL", "INFO"))

    # RabbitMQ Settings
    rabbitmq_host: str = field(default_factory=lambda: os.getenv("RABBITMQ_HOST", "localhost"))
    rabbitmq_port: int = field(default_factory=lambda: int(os.getenv("RABBITMQ_PORT", "5672")))
    rabbitmq_user: str = field(default_factory=lambda: os.getenv("RABBITMQ_USER", "guest"))
    rabbitmq_password: str = field(default_factory=lambda: os.getenv("RABBITMQ_PASSWORD", "guest"))
    rabbitmq_queue: str = field(default_factory=lambda: os.getenv("RABBITMQ_QUEUE", "stt_jobs"))
    rabbitmq_analytics_queue: str = field(
        default_factory=lambda: os.getenv("RABBITMQ_ANALYTICS_QUEUE", "analytics_jobs")
    )
    stt_enqueue_analytics_always: bool = field(
        default_factory=lambda: os.getenv("STT_ENQUEUE_ANALYTICS_ALWAYS", "1").lower()
        not in ("0", "false", "no")
    )

settings = Settings()
