"""
state.py — глобальное состояние TelePush.
"""
import asyncio
import threading
from typing import Dict, Optional, TYPE_CHECKING

if TYPE_CHECKING:
    from models import OwnerCtx, DeviceInfo, ProxyResolved

# Lock для потокобезопасного доступа
owners_lock = threading.RLock()

# Реестр контекстов пользователей
owners: Dict[int, "OwnerCtx"] = {}

# В standalone нет Telegram бота — заглушка чтобы state.bot.send_message не падал
class _FakeBot:
    """Заглушка: все вызовы state.bot.xxx() игнорируются."""
    async def send_message(self, *a, **kw): pass
    async def edit_message(self, *a, **kw): pass
    async def delete_messages(self, *a, **kw): pass
    async def send_file(self, *a, **kw): pass
    async def __call__(self, *a, **kw): pass
    def __getattr__(self, name):
        async def _noop(*a, **kw): pass
        return _noop

bot = _FakeBot()
standalone_mode: bool = True

# Event loop (сохраняется при старте для доступа из Flask-потока)
event_loop: Optional[asyncio.AbstractEventLoop] = None

# Глобальные параметры устройства и прокси
dev: Optional["DeviceInfo"] = None
proxy_res: Optional["ProxyResolved"] = None

# Флаг завершения
shutdown_flag: bool = False

# Пороги FloodWait
FLOODWAIT_DISABLE_THRESHOLD_SEC: int = 3600
FLOODWAIT_WARN_THRESHOLD_SEC: int = 300
