/**
 * Türkçe güvenli slug. Sıra kritik: önce tr-TR lowercase — düz toLowerCase()
 * 'İ'yi 'i' + U+0307 (combining dot) yapar ve slug bozulur — sonra ASCII
 * katlama, en son NFKD ile kalan aksan artıkları temizlenir.
 */
export function turkishSlugify(s: string): string {
  return s
    .toLocaleLowerCase("tr-TR")
    .replace(/ı/g, "i")
    .replace(/ş/g, "s")
    .replace(/ğ/g, "g")
    .replace(/ü/g, "u")
    .replace(/ö/g, "o")
    .replace(/ç/g, "c")
    .replace(/â/g, "a")
    .replace(/î/g, "i")
    .replace(/û/g, "u")
    .normalize("NFKD")
    .replace(/[̀-ͯ]/g, "")
    .replace(/[^a-z0-9]+/g, "-")
    .replace(/^-+|-+$/g, "");
}

/**
 * "Psikoloji (%50 İndirimli) " → "Psikoloji". Burs/dil/kampüs gibi tüm
 * parantez varyantlarını atar; arama niyeti taban ada gelir, varyantlar
 * bölüm sayfasında satır olarak listelenir.
 */
export function bolumBazAdi(isim: string): string {
  return isim
    .replace(/\s*\([^)]*\)/g, "")
    .replace(/\s+/g, " ")
    .trim();
}

/**
 * /universite/[slug] sayfa slug'ı: harita.ts'teki uniAdiNormalize ile aynı
 * kural (sondaki "(İL)" eki atılır). Katalog haritası DB'deki tüm universite
 * değerlerinden kurulduğu için bu slug her zaman var olan bir sayfaya çıkar.
 */
export function uniSayfaSlug(ad: string): string {
  return turkishSlugify(ad.replace(/\s*\([^)]*\)\s*$/, "").trim());
}

/**
 * /bolum/[slug] sayfa slug'ı: katalog.ts'teki bolumSlugFromIsim ile aynı kural
 * (bolumBazAdi + turkishSlugify). Bölüm haritası DB'deki tüm isim
 * değerlerinden kurulduğu için bu slug da her zaman var olan bir sayfaya çıkar
 * (bkz. liste-cekmecesi'ndeki bolumHref).
 */
export function bolumSayfaSlug(isim: string): string {
  return turkishSlugify(bolumBazAdi(isim));
}

/** ALL-CAPS veritabanı adlarını tr-TR başlık düzenine çevirir (İSTANBUL → İstanbul). */
export function trBaslikDuzeni(s: string): string {
  return s
    .toLocaleLowerCase("tr-TR")
    .split(" ")
    .map((w) =>
      w.length > 0 ? w[0].toLocaleUpperCase("tr-TR") + w.slice(1) : w,
    )
    .join(" ");
}
