import asyncio
import os
import sys
from dotenv import load_dotenv
from bot import MyBot  # Modification ici : on importe la classe
from src.logger import kuby_logger, log_performance

kuby_logger.info("🚀 Lancement du bot Kuby...")
kuby_logger.debug("Starting __main__.py execution")

# Load environment variables
kuby_logger.info("📋 Chargement des variables d'environnement...")
load_dotenv()
kuby_logger.debug("Environment variables loaded")

# Get Discord token
TOKEN = os.getenv("DISCORD_TOKEN")
kuby_logger.debug(f"Token retrieved from environment: {'***' if TOKEN else 'None'}")

if not TOKEN:
    kuby_logger.critical("❌ Erreur: Token Discord non trouvé dans les variables d'environnement!")
    kuby_logger.critical("Assurez-vous d'avoir un fichier .env avec DISCORD_TOKEN=votre_token")
    sys.exit(1)

kuby_logger.info("✅ Token Discord chargé avec succès")

@log_performance
async def main():
    kuby_logger.info("🔄 Démarrage de la connexion Discord...")
    try:
        # Modification majeure : l'objet bot est instancié ici, au sein de la boucle active
        bot = MyBot() 
        
        await bot.do_async_setup()
        kuby_logger.info("🔗 Connexion établie avec Discord...")
        await bot.start(TOKEN)
    except KeyboardInterrupt:
        kuby_logger.info("🛑 Bot shutdown requested by user")
    except Exception as e:
        kuby_logger.critical(f"❌ Erreur fatale lors du démarrage : {e}", exc_info=True)
        raise

if __name__ == "__main__":
    kuby_logger.info("🚀 Lancement du bot Kuby...")
    try:
        asyncio.run(main())
    except KeyboardInterrupt:
        kuby_logger.info("🛑 Bot shutdown complete")
    except Exception as e:
        kuby_logger.critical(f"❌ Erreur fatale: {e}", exc_info=True)
        sys.exit(1)