from typing import *
from royalnet.commands import *
# import markovify
# import os
# import re


class MarkovCommand(Command):
    name: str = "markov"

    description: str = "Genera una frase da una catena di Markov."

    syntax: str = "[modello]"

    # _texts: Dict[str, markovify.NewlineText] = {}

    def __init__(self, interface: CommandInterface):
        super().__init__(interface)
        # if interface.name == "telegram":
        #     files: List[str] = tuple(os.walk(self.config["Markov"]["models_directory"]))[0][2]
        #     for file in files:
        #         match = re.match(r"(\S+)\.json$", file)
        #         if match is None:
        #             continue
        #         model_name = match.group(1)
        #         with open(os.path.join(self.config["Markov"]["models_directory"], file)) as f:
        #             self._texts[model_name] = markovify.NewlineText.from_json(f.read())

    async def run(self, args: CommandArgs, data: CommandData) -> None:
        raise CommandError(f"{self} è disattivato. Riprova tra un po' di giorni!")
        # if self.interface.name != "telegram":
        #     raise UnsupportedError("[c]markov[/c] funziona solo su Telegram.")
        # model_name = args.optional(0, self.config["Markov"]["default_model"])
        # try:
        #     sentence = self._texts[model_name].make_sentence()
        # except KeyError:
        #     raise InvalidInputError("Il modello richiesto non esiste.")
        # if sentence is None or sentence == "":
        #     await data.reply(f"💭 Il bot ([c]{model_name}[/c])... non dice niente. Riprova!")
        # else:
        #     await data.reply(f'💬 Il bot ([c]{model_name}[/c]) dice:\n{sentence}')
