"""
Глобальный экземпляр бота — доступен из любого процесса
"""
from aiogram import Bot
from aiogram.client.default import DefaultBotProperties
from aiogram.enums import ParseMode
from aiogram.client.session.aiohttp import AiohttpSession
from config import BOT_TOKEN, get_proxy_url, PROXY_TYPE, PROXY_HOST, PROXY_PORT
import logging

logger = logging.getLogger(__name__)

# Глобальный синглтон
bot: Bot | None = None


def get_bot() -> Bot:
    """Получить экземпляр бота (создаёт если ещё не создан)"""
    global bot
    
    if bot is None:
        bot = _create_bot()
    
    return bot


def _create_bot() -> Bot:
    """Создать бота с настройкой прокси"""
    proxy_url = get_proxy_url()
    
    if proxy_url:
        logger.info(f'🔒 Создание бота с прокси: {PROXY_TYPE}://{PROXY_HOST}:{PROXY_PORT}')
        aiogram_session = AiohttpSession(proxy=proxy_url)
        return Bot(
            token=BOT_TOKEN,
            session=aiogram_session,
            default=DefaultBotProperties(parse_mode=ParseMode.HTML)
        )
    else:
        logger.info('🔓 Создание бота без прокси')
        return Bot(
            token=BOT_TOKEN,
            default=DefaultBotProperties(parse_mode=ParseMode.HTML)
        )


async def close_bot():
    """Закрыть сессию бота"""
    global bot
    if bot and bot.session:
        await bot.session.close()
        logger.info('🔒 Сессия бота закрыта')
