# main.py
import discord
from discord.ext import commands
import os
from dotenv import load_dotenv
import threading
import itertools
from npc_memory import NPCMemory
from npc_handler import NPCHandler
from cogs.npc import NPCCog


class MyNewHelp(commands.MinimalHelpCommand):
    async def send_pages(self):
        destination = self.get_destination()
        for page in self.paginator.pages:
            emby = discord.Embed(description=page)
            await destination.send(embed=emby)


class Client(commands.Bot):
    def __init__(self):
        super().__init__(
            command_prefix=self.iterate_prefix("py"),
            strip_after_prefix=True,
            case_insensitive=True,
            intents=discord.Intents.all(),
            help_command=MyNewHelp(),
        )
    def iterate_prefix(self, prefix):
        prefixes = list(map(''.join, itertools.product(*zip(prefix.upper(), prefix.lower()))))
        print(prefixes)
        
        return prefixes

    async def setup_hook(self):  # overwriting a handler
        cogs_folder = f"{os.path.abspath(os.path.dirname(__file__))}/cogs"
        for filename in os.listdir(cogs_folder):
            if filename.endswith(".py"):
                try:
                    await self.load_extension(f"cogs.{filename[:-3]}")
                except Exception as e:
                    print(f"Failed to load {filename}: {e}")
        await self.tree.sync()
        print("Loaded cogs")


def main():
    load_dotenv()
    client = Client()
    token = "ODA2Mjg0OTY2NzQ0NTU1NjAw.GFQoZn.Jh0OJ7KczDOfRxFFESnAPOiodUAkjSyjQ-ClGg"
    if token is not None:
        client.run(token)
    else:
        print("Token is missing.")


if __name__ == "__main__":
    main()
