import asyncio
import threading
import logging
import os
from app.bot import run_bot
from app.web import start_web_server, USE_DATABASE_TOKENS

# Suppress aiohttp protocol errors and access logs to keep console clean
logging.basicConfig(level=logging.INFO)
logging.getLogger('aiohttp.server').setLevel(logging.ERROR)
logging.getLogger('aiohttp.access').setLevel(logging.ERROR)

def create_token_manager():
    """Create token manager with database support if enabled"""
    if USE_DATABASE_TOKENS:
        from app.token_manager import ThreadSafeTokenManager
        print("[MAIN] Using DATABASE token loader (USE_DATABASE_TOKENS=true)")
        return ThreadSafeTokenManager(use_database=True)
    else:
        from app.config import TOKEN_MANAGER
        print("[MAIN] Using CONFIG token loader (USE_DATABASE_TOKENS=false)")
        return TOKEN_MANAGER

def run_web_in_thread():
    """Run web server in a separate thread with its own event loop"""
    loop = asyncio.new_event_loop()
    asyncio.set_event_loop(loop)
    loop.run_until_complete(start_web_server(port=8081))
    loop.run_forever()

if __name__ == "__main__":
    # Override TOKEN_MANAGER in config before starting
    os.environ.setdefault('USE_DATABASE_TOKENS', 'false')
    os.environ.setdefault('LARAVEL_API_URL', os.environ.get('LARAVEL_API_URL', 'http://127.0.0.1:9000'))
    os.environ.setdefault('ADMIN_API_KEY', os.environ.get('ADMIN_API_KEY', 'locket-gold-secret-2024'))

    # Start web server in background thread
    web_thread = threading.Thread(target=run_web_in_thread, daemon=True)
    web_thread.start()
    
    try:
        # Run telegram bot in main thread
        run_bot()
    except Exception as e:
        print(f"\n⚠️ [TELEGRAM BOT] Could not start Telegram Bot: {e}")
        print("💡 [WEB SERVER] Web API Server will continue running on http://127.0.0.1:8081")
        print("Keep-Alive: Press Ctrl+C to stop.")
        # Keep main thread alive so daemon web server thread doesn't exit
        try:
            while True:
                import time
                time.sleep(3600)
        except KeyboardInterrupt:
            print("Stopping server...")
