from time import sleep

class TUIXD:

    def input_int(self, msg):
        while True:
            s = input(msg)
            if s.isdigit():
                return s
            else:
                print("Invalid. Use only 0-9.")


    def input_text(self, msg):
        return input(msg)

    def select(self, title, options):
        # Определяем тип options и подготавливаем данные
        if isinstance(options, dict):
            keys = list(options.keys())
            values = list(options.values())
            display_list = values
            return_keys = True
        else:
            display_list = options
            return_keys = False

        if not display_list:
            print("No options available.")
            return None

        # Рассчитываем ширину Box
        max_option_length = max(len(f"{i + 1}. {opt}") for i, opt in enumerate(display_list))
        box_width = max(len(title), max_option_length) + 4

        # Рисуем интерфейс
        print("┌" + "─" * box_width + "┐")
        print("│ " + title.ljust(box_width - 2) + " │")
        print("├" + "─" * box_width + "┤")
        for i, opt in enumerate(display_list, start=1):
            line = f"{i}. {opt}"
            print("│ " + line.ljust(box_width - 2) + " │")
        print("└" + "─" * box_width + "┘")

        # Обрабатываем ввод пользователя
        prompt = f"Enter [1..{len(display_list)}] or Q to cancel: "
        while True:
            choice = input(prompt).strip().lower()
            if choice == 'q':
                return None
            if choice.isdigit():
                index = int(choice) - 1
                if 0 <= index < len(display_list):
                    if return_keys:
                        return keys[index]  # Возвращаем ключ для словаря
                    else:
                        return display_list[index]  # Возвращаем значение для списка
            print("Invalid input. Please try again.")


def slow_exit():
    print('exit', end='', flush=True)
    sleep(1)
    print('.', end='', flush=True)
    sleep(1)
    print('.', end='', flush=True)
    sleep(1)
    print('.', end='', flush=True)
    sleep(1)
    exit(0)