import json


class ModuleHelp:
    def __init__(self, filename, log):
        self.tag = "%20s - " % "mhelp"
        self.log = log
        self.filename = filename

        self.help_dict = self.load_db()

        self.log.debug(f"{self.tag}Modul Help geladen")

    def load_db(self):
        help_dict = {}
        try:
            with open(self.filename, 'r', encoding='utf8') as f:
                help_dict = json.load(f)

        except Exception as ex:
            self.log.error(
                f"{self.tag}Failed loading help dict {self.filename}: {ex}")

        return help_dict

    def search_command(self, keyword, groupInfo):
        answer = ''
        try:
            keyword = keyword.strip().lower()
            if keyword[0]!= ".":
                keyword =f".{keyword}"
                
            for category in self.help_dict:
                for command in  self.help_dict[category]:
                    if keyword in [x.lower() for x in command["Names"]] and (groupInfo is None or keyword[1:].lower() in groupInfo["COMMANDS"]):
                        answer += f'Name(s): {", ".join(str(x) for x in command["Names"])}\n'
                        answer += f'Description: \n{command["Description"]}'
                        break

            if answer == '':
                answer += f'There is no entry for {keyword}'

        except Exception as ex:
            self.log.error(
                f"{self.tag}Fucked up checking for keyword:{keyword} Exception:{ex}")
            answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !"

        return answer

    def get_all_commands(self, groupInfo):
        answer = ''
        try:
            for category in self.help_dict:
                cmdList=''
                for command in self.help_dict[category]:
                    cmds = []
                    for cmd in command["Names"]:
                        if (groupInfo is None or cmd[1:].lower() in groupInfo["COMMANDS"]):
                            cmds.append(cmd)
                    if len(cmds)>0:
                        cmdList += f'{", ".join(str(x) for x in cmds)}\n'
                if len(cmdList) >0:
                    answer += f'## {category} ##\n'
                    answer+= cmdList
                    answer += '\n'

            if answer == '':
                answer += f'There is no help!'

        except Exception as ex:
            self.log.error(
                f"{self.tag}Fucked up checking for keyword:{keyword} Exception:{ex}")
            answer = "Ausnahmefehler: Dieser Eintrag konnte leider nicht Angezeigt werden.\nBei Fragen wende dich an .request !"

        return answer