from typing import Optional, Union


def passages2text(passages: Union[str, list, tuple]) -> str:
    """Formats the given one or more passages into a single structured string."""
    if isinstance(passages, str):
        return passages

    assert type(passages) in [list, tuple]

    if len(passages) == 0:
        return "N/A"

    if len(passages) == 1:
        return f"«{passages[0]}»"

    return "\n".join([f"[{idx+1}] «{txt}»" for idx, txt in enumerate(passages)])


# def passages2textV2(passages: Union[str, list, tuple]) -> str:
#     """Formats the given one or more passages into a single structured string."""
#     if isinstance(passages, str):
#         return passages

#     assert type(passages) in [list, tuple]

#     def psg2text(psg):
#         try:
#             title, snippet = psg.split("|", 1)
#             return f"Title: {title.strip()} | Snippet: «{snippet.strip()}»"
#         except Exception:
#             pass
        
#         return f"«{psg}»"

#     if len(passages) == 0:
#         return "N/A"

#     if len(passages) == 1:
#         return psg2text(passages[0])

#     return "\n".join([f"[{idx+1}] {psg2text(txt)}" for idx, txt in enumerate(passages)])


def format_answers(answers: Union[str, list]) -> Optional[str]:
    """Parses the given answers and returns the appropriate answer string.

    Args:
        answers (Union[str, list]): The answers to parse.

    Raises:
        ValueError: when instance is of type list and has no answers
        ValueError: when is not of type list or str

    Returns:
        _type_: Optional[str]
    """
    if isinstance(answers, list):
        if len(answers) >= 1:
            return str(answers[0]).strip()
        if len(answers) == 0:
            raise ValueError("No answers found")
    elif isinstance(answers, str):
        return answers
    else:
        raise ValueError(f"Unable to parse answers of type {type(answers)}")
