"""
Main application entry point.
Runs both the FastAPI application and Telegram bot.
"""
import asyncio
import uvicorn
from app.main import app
from app.bot import start_bot
from logging import getLogger

logger = getLogger(__name__)

async def run_api():
    """Run FastAPI application"""
    config = uvicorn.Config(
        app,
        host="0.0.0.0",
        port=8000,
        reload=True
    )
    server = uvicorn.Server(config)
    await server.serve()

async def main():
    """Run both bot and API in the main thread"""
    try:
        # Создаем задачи для бота и API
        bot_task = asyncio.create_task(start_bot())
        api_task = asyncio.create_task(run_api())
        
        # Запускаем обе задачи
        await asyncio.gather(bot_task, api_task)
    except Exception as e:
        logger.error(f"Application crashed: {e}", exc_info=True)

if __name__ == "__main__":
    # Запускаем в основном потоке
    asyncio.run(main())