/**
 * Sortiert ein Array von Objekten anhand einer Spalte.
 *
 * @param data Array von Objekten
 * @param column Sortierspalte (Property-Name im Objekt)
 * @param ascending true = aufsteigend, false = absteigend
 */
export function sortData<T extends Record<string, any>>(
    data: T[],
    column?: keyof T | null,
    ascending: boolean = true
): T[] {
    if (!column) return data

    return [...data].sort((a, b) => {
        const valA = a[column]
        const valB = b[column]

        // null/undefined nach hinten
        if (valA == null && valB != null) return 1
        if (valB == null && valA != null) return -1
        if (valA == null && valB == null) return 0

        // Zahlenvergleich
        if (typeof valA === "number" && typeof valB === "number") {
            return ascending ? valA - valB : valB - valA
        }

        // Datumsvergleich
        // @ts-ignore
        if (valA instanceof Date && valB instanceof Date) {
            return ascending ? valA.getTime() - valB.getTime() : valB.getTime() - valA.getTime()
        }

        // Fallback: Stringvergleich
        return ascending
            ? String(valA).localeCompare(String(valB))
            : String(valB).localeCompare(String(valA))
    })
}