"use client";

// Oturum durumunun client tarafındaki hafif sinyali. Kaynak: UserNav (sunucu
// bileşeni) → ListeSenkron mount'ta bildirir. Çekmece ve kaydet banner'ı
// authClient round-trip'i atmadan "girişsiz mi?" bilgisine buradan erişir
// (layout'a useSession koymak landing'i statiklikten çıkarırdı —
// rybbit-identify.tsx'teki gerekçe).

import { useSyncExternalStore } from "react";

let girisli: boolean | null = null;
const dinleyiciler = new Set<() => void>();

export function oturumDurumuBildir(deger: boolean): void {
  if (girisli === deger) return;
  girisli = deger;
  for (const cb of dinleyiciler) cb();
}

function abone(cb: () => void) {
  dinleyiciler.add(cb);
  return () => {
    dinleyiciler.delete(cb);
  };
}

/** null = henüz bilinmiyor (sinyal gelmedi); banner bu durumda gösterilmez. */
export function useOturumDurumu(): boolean | null {
  return useSyncExternalStore(
    abone,
    () => girisli,
    () => null,
  );
}
