import type { Prisma } from "@prisma/client"

// MySQL/MariaDB (o2switch) n'a pas de colonnes tableau natives comme
// PostgreSQL : les champs concernés (Product.images/sizes/styles/materials,
// Drop.sketches) sont stockés en JSON. Prisma les lit en `Prisma.JsonValue`
// (string | number | boolean | objet | tableau | null) — ces helpers
// normalisent le résultat brut d'une requête juste après la lecture, pour
// que le reste du code (JSX, composants) continue de manipuler du
// `string[]` sans rien changer d'autre. En écriture, un tableau de chaînes
// normal suffit (Prisma.InputJsonValue accepte nativement les tableaux).
export function toStringArray(value: Prisma.JsonValue | null | undefined): string[] {
  if (!Array.isArray(value)) return []
  return value.filter((v): v is string => typeof v === "string")
}

export function normalizeProductArrays<
  T extends { images: unknown; sizes: unknown; styles: unknown; materials: unknown },
>(
  p: T
): Omit<T, "images" | "sizes" | "styles" | "materials"> & {
  images: string[]
  sizes: string[]
  styles: string[]
  materials: string[]
} {
  return {
    ...p,
    images: toStringArray(p.images as Prisma.JsonValue),
    sizes: toStringArray(p.sizes as Prisma.JsonValue),
    styles: toStringArray(p.styles as Prisma.JsonValue),
    materials: toStringArray(p.materials as Prisma.JsonValue),
  }
}

export function normalizeDropArrays<T extends { sketches: unknown }>(
  d: T
): Omit<T, "sketches"> & { sketches: string[] } {
  return { ...d, sketches: toStringArray(d.sketches as Prisma.JsonValue) }
}
