// Manuel liste kaydının saf doğrulama katmanı. store.ts ("use client")
// buradan re-export eder; kayitli-liste-actions.ts ("use server") sunucuda
// aynı süzgeci kullanır — client/sunucu iki ayrı doğrulama yazılmaz.

import type { RiskSeviyesi } from "@/lib/risk";

export const MANUEL_LISTE_MAX = 24;

export type ManuelKaynak = "sonuc" | "bolum" | "universite";

export type ManuelTercih = {
  /** yokatlas program id'si */
  id: string;
  isim: string;
  universite: string;
  il: string | null;
  unitur: string | null;
  tur: string | null;
  efektifSira: number | null;
  /** Ekleme / profil anındaki aday sıralamasına göre risk */
  risk: RiskSeviyesi | null;
  kaynak?: ManuelKaynak;
};

/** Güvenilmeyen JSON'u (localStorage veya sunucu kaydı) listeye süzer. */
export function dogrula(ham: unknown): ManuelTercih[] {
  if (!Array.isArray(ham)) return [];
  const sonuc: ManuelTercih[] = [];
  for (const t of ham) {
    if (typeof t !== "object" || t === null) continue;
    const kayit = t as Record<string, unknown>;
    if (typeof kayit.id !== "string" || typeof kayit.isim !== "string") continue;
    const risk: RiskSeviyesi | null =
      kayit.risk === "guvenli" ||
      kayit.risk === "az-riskli" ||
      kayit.risk === "riskli"
        ? kayit.risk
        : null;
    const kaynak: ManuelKaynak | undefined =
      kayit.kaynak === "sonuc" ||
      kayit.kaynak === "bolum" ||
      kayit.kaynak === "universite"
        ? kayit.kaynak
        : undefined;
    sonuc.push({
      id: kayit.id,
      isim: kayit.isim,
      universite: typeof kayit.universite === "string" ? kayit.universite : "",
      il: typeof kayit.il === "string" ? kayit.il : null,
      unitur: typeof kayit.unitur === "string" ? kayit.unitur : null,
      tur: typeof kayit.tur === "string" ? kayit.tur : null,
      efektifSira:
        typeof kayit.efektifSira === "number" &&
        Number.isFinite(kayit.efektifSira)
          ? kayit.efektifSira
          : null,
      risk,
      kaynak,
    });
    if (sonuc.length >= MANUEL_LISTE_MAX) break;
  }
  return sonuc;
}
