import re from linkki_poster.models import LANGUAGE_DISPLAY_NAMES, LanguageAssets def prompt_language_order(languages: list[LanguageAssets], input_fn=input) -> list[LanguageAssets]: if len(languages) <= 1: return languages print("Language order:") for index, language_assets in enumerate(languages, start=1): print(f"{index}. {LANGUAGE_DISPLAY_NAMES[language_assets.language]}") expected = list(range(1, len(languages) + 1)) while True: raw = input_fn("Enter language order: ") if raw.strip() == "": return languages parsed = parse_order_input(raw, len(languages)) if parsed is None: print(f"Invalid order. Press Enter for default order {expected}, or enter digits {expected}.") continue return [languages[index - 1] for index in parsed] def parse_order_input(raw_text: str, language_count: int) -> list[int] | None: digits = [int(item) for item in re.findall(r"\d", raw_text)] if len(digits) != language_count: return None expected = set(range(1, language_count + 1)) if set(digits) != expected: return None return digits