"""
Bot configuration
"""

import os
from typing import Optional
from dotenv import load_dotenv

load_dotenv()


class BotConfig:
    """Bot configuration class"""

    def __init__(self):
        self.token: str = os.getenv("BOT_TOKEN", "")
        self.backend_api_url: str = os.getenv("BACKEND_API_URL", "http://localhost:8080")
        self.frontend_url: str = os.getenv("FRONTEND_URL", "http://localhost:5173")
        self.webhook_secret: Optional[str] = os.getenv("WEBHOOK_SECRET")
        self.webhook_url: Optional[str] = os.getenv("WEBHOOK_URL")
        self.bot_username: str = os.getenv("BOT_USERNAME", "QuizBot")
        self.admin_user_ids: list[int] = self._parse_admin_ids()
        self.operator_user_ids: list[int] = self._parse_operator_ids()

    def _parse_admin_ids(self) -> list[int]:
        """Parse admin user IDs from environment variable"""
        admin_ids = os.getenv("ADMIN_USER_IDS", "")
        if not admin_ids:
            return []
        try:
            return [int(id_str.strip()) for id_str in admin_ids.split(",")]
        except ValueError:
            return []

    def _parse_operator_ids(self) -> list[int]:
        """Parse operator user IDs from environment variable"""
        operator_ids = os.getenv("OPERATOR_USER_IDS", "")
        if not operator_ids:
            return []
        try:
            return [int(id_str.strip()) for id_str in operator_ids.split(",")]
        except ValueError:
            return []

    def validate(self) -> bool:
        """Validate configuration"""
        if not self.token:
            raise ValueError("BOT_TOKEN is required")

        if not self.backend_api_url:
            raise ValueError("BACKEND_API_URL is required")

        if not self.frontend_url:
            raise ValueError("FRONTEND_URL is required")

        return True

    def is_admin(self, user_id: int) -> bool:
        """Check if user is admin"""
        return user_id in self.admin_user_ids

    def is_operator(self, user_id: int) -> bool:
        """Check if user is operator"""
        return user_id in self.operator_user_ids or self.is_admin(user_id)

    def has_admin_privileges(self, user_id: int) -> bool:
        """Check if user has admin or operator privileges"""
        return self.is_admin(user_id) or self.is_operator(user_id)


class AppConfig:
    """Application configuration"""

    DEBUG = os.getenv("DEBUG", "false").lower() == "true"
    LOG_LEVEL = os.getenv("LOG_LEVEL", "INFO")
    DATABASE_URL = os.getenv("DATABASE_URL", "")
    REDIS_URL = os.getenv("REDIS_URL", "")


# Global configuration instance
config = BotConfig()
app_config = AppConfig()