import asyncio
import logging
import os
import sys
from datetime import datetime

from aiogram import Bot, Dispatcher
from aiogram.enums import ParseMode
from aiogram.exceptions import TelegramUnauthorizedError

from config import Config
from handlers.bot_handlers import BotHandlers

def setup_logging():
    """
    Logging sozlamalari
    """
    # Logs papkani yaratish
    os.makedirs("logs", exist_ok=True)
    
    # Logging format
    logging_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    
    # Fayl va console uchun logging
    logging.basicConfig(
        level=logging.INFO,
        format=logging_format,
        handlers=[
            logging.FileHandler(Config.LOG_FILE, encoding='utf-8'),
            logging.StreamHandler(sys.stdout)
        ]
    )
    
    # Aiogram logger'ini sozlash
    logging.getLogger("aiogram").setLevel(logging.WARNING)
    logging.getLogger("aiohttp").setLevel(logging.WARNING)

async def main():
    """
    Asosiy dastur
    """
    # Logging sozlash
    setup_logging()
    logging.info("🎵 Muzlar Bot ishga tushmoqda...")
    
    try:
        # Bot va Dispatcher yaratish
        bot = Bot(token=Config.BOT_TOKEN, parse_mode=ParseMode.HTML)
        dp = Dispatcher()
        
        # Handler'larni registratsiya qilish
        handlers = BotHandlers(bot, dp)
        
        # Bot ma'lumotlarini olish
        bot_info = await bot.get_me()
        logging.info(f"✅ Bot ishga tushdi: @{bot_info.username}")
        
        # Temp va logs papkalarini yaratish
        os.makedirs(Config.TEMP_DIR, exist_ok=True)
        os.makedirs("logs", exist_ok=True)
        
        logging.info("🚀 Bot polling boshlandi...")
        
        # Bot'ni ishga tushirish
        await dp.start_polling(bot)
        
    except TelegramUnauthorizedError:
        logging.error("❌ Noto'g'ri bot token! Config.py faylini tekshiring.")
    except Exception as e:
        logging.error(f"❌ Bot ishga tushishda xatolik: {e}")
        import traceback
        traceback.print_exc()
    finally:
        # Tozalash
        if 'handlers' in locals():
            handlers.db.close()
        logging.info("🛑 Bot to'xtatildi.")

if __name__ == "__main__":
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        logging.info("⏹️  Bot foydalanuvchi tomonidan to'xtatildi.")
    except Exception as e:
        logging.error(f"💥 Dastur xatosi: {e}")
        import traceback
        traceback.print_exc() 