from dataclasses import fields, is_dataclass
from typing import List, TypeVar, Type
T = TypeVar("T")  # Generic Type for Dataclasses

def print_markdown_table_header(dataclass_type: Type[T]) -> str:
    """
    Returns the markdown table header and separator rows for any dataclass.
    """
    if not is_dataclass(dataclass_type):
        raise TypeError(f"{dataclass_type} is not a dataclass.")

    headers = [field.name for field in fields(dataclass_type)]
    header_row = f"| {' | '.join(headers)} |"
    separator_row = f"| {' | '.join(['---'] * len(headers))} |"
    return f"{header_row}\n{separator_row}"

def print_as_markdown_table_row(instance: T) -> str:
    """
    Returns a markdown-formatted row for any dataclass instance.
    """
    if not is_dataclass(instance):
        raise TypeError(f"{instance} is not a dataclass instance.")

    values = [str(getattr(instance, field.name)) for field in fields(instance)]
    return f"| {' | '.join(values)} |"

def convert_to_markdown_table(details: List[T]) -> str:
    """
    Converts a list of dataclass instances into a markdown table.
    """
    if not details:
        return "No details available."

    dataclass_type = type(details[0])
    if not all(is_dataclass(d) and isinstance(d, dataclass_type) for d in details):
        raise TypeError("All items in the list must be of the same dataclass type.")

    markdown_table = [print_markdown_table_header(dataclass_type)]
    for instance in details:
        markdown_table.append(print_as_markdown_table_row(instance))

    return "\n".join(markdown_table)

# Example Usage
if __name__ == "__main__":
    from dataclasses import dataclass

    @dataclass
    class SimpleData:
        id: int
        description: str

    data_list = [
        SimpleData(id=1, description="First item"),
        SimpleData(id=2, description="Second item"),
    ]

    markdown_table = convert_to_markdown_table(data_list)
    print(markdown_table)