import discord
from config import config
import logging

logging.basicConfig(level=logging.INFO)

TOKEN = config['DISCORD_TOKEN']
GUILD_ID_1 = config['GUILD_ID_1']
GUILD_ID_2 = config['GUILD_ID_2']

intents = discord.Intents.default()
intents.message_content = True


class Selena(discord.Client):
    def __init__(self):
        super().__init__(intents=intents)
        self.tree = discord.app_commands.CommandTree(self)
        self.xp_module = None  # Initialize as None
        self.load_modules()

    async def setup_hook(self):
        logging.info("Setting up modules...")
        await self.tree.sync(guild=discord.Object(id=GUILD_ID_1))
        logging.info(f"Modules setup and commands synchronized to {GUILD_ID_1}")
        await self.tree.sync(guild=discord.Object(id=GUILD_ID_2))
        logging.info(f"Modules setup and commands synchronized to {GUILD_ID_2}")
        # Call setup_hook for xp_module here
        if self.xp_module:
            await self.xp_module.setup_hook()

    def load_modules(self):
        if config['modules']['music']['enabled']:
            from modules.music.music import setup as music_setup
            music_setup(self)
            logging.info("Music module loaded")

        if config['modules']['terms_privacy']['enabled']:
            from modules.admin.terms_privacy import setup as terms_privacy_setup
            terms_privacy_setup(self)
            logging.info("Terms and Privacy module loaded")

        if config['modules']['data_privacy']['enabled']:
            from modules.admin.data_privacy import setup as data_privacy_setup
            data_privacy_setup(self)
            logging.info("Data Privacy module loaded")


bot = Selena()


@bot.event
async def on_ready():
    logging.info(f'{bot.user.name} has connected to Discord!')

bot.run(TOKEN)