// Ortak tercih profilinin localStorage katmanı — yalnızca client'ta anlamlı.
// Şema, doğrulama ve sabitler sihirbaz-sabitler.ts'te yaşar.

import {
  PROFIL_DEGISTI_EVENT,
  SIHIRBAZ_STORAGE_KEY,
  tercihProfiliDogrula,
  type TercihProfili,
} from "./sihirbaz-sabitler";

function profilDegistiginiYayinla(): void {
  window.dispatchEvent(new Event(PROFIL_DEGISTI_EVENT));
}

/** Client'ta SIHIRBAZ_STORAGE_KEY'den doğrulanmış profil okur. */
export function tercihProfiliOku(): TercihProfili | null {
  if (typeof window === "undefined") return null;
  try {
    const ham = localStorage.getItem(SIHIRBAZ_STORAGE_KEY);
    if (!ham) return null;
    return tercihProfiliDogrula(JSON.parse(ham));
  } catch {
    return null;
  }
}

/** Ortak profili yazar; hero ve Yapay Zeka sihirbazıyla aynı anahtarı kullanır. */
export function tercihProfiliYaz(profil: TercihProfili): void {
  if (typeof window === "undefined") return;
  const dogru = tercihProfiliDogrula(profil);
  if (!dogru) return;
  try {
    localStorage.setItem(SIHIRBAZ_STORAGE_KEY, JSON.stringify(dogru));
  } catch {}
  profilDegistiginiYayinla();
}

/** Profili siler (ör. Yapay Zeka listesi üretilip seçimler tüketildiğinde). */
export function tercihProfiliSil(): void {
  if (typeof window === "undefined") return;
  try {
    localStorage.removeItem(SIHIRBAZ_STORAGE_KEY);
  } catch {}
  profilDegistiginiYayinla();
}

export function tercihProfiliTamamlandiMi(): boolean {
  return tercihProfiliOku() !== null;
}
