// Program adını (isim) insan-dostu ilgi kategorilerine eşler.
// Sihirbazdaki bubble'lar ve aday havuzu filtresi buradan beslenir.
// Kural: bir program birden fazla kategoriye girebilir; hiçbirine girmezse
// "Diğer" sayılır (bubble olarak gösterilmez ama havuzdan asla dışlanmaz).

export const KATEGORILER = [
  "Mühendislik & Teknoloji",
  "Sağlık & Tıp",
  "Hukuk & Siyasal",
  "İktisat & İşletme",
  "Eğitim & Öğretmenlik",
  "Mimarlık & Tasarım",
  "Fen & Temel Bilimler",
  "Sosyal & Beşeri Bilimler",
  "Sanat, Medya & İletişim",
  "Psikoloji & Danışmanlık",
  "Turizm & Gastronomi",
  "Tarım & Doğa",
] as const;

export type Kategori = (typeof KATEGORILER)[number];

// Sıra önemli değil; her kural bağımsız test edilir. Regexler Türkçe küçük harfe
// çevrilmiş isim üzerinde çalışır (bkz. kategoriBul).
const KATEGORI_KURALLARI: { kategori: Kategori; kural: RegExp }[] = [
  {
    kategori: "Mühendislik & Teknoloji",
    kural:
      /mühendis|yazılım|bilgisayar|bilişim|elektrik|elektronik|mekatronik|makine|makina|otomotiv|inşaat|endüstri|metalurji|malzeme|maden|jeoloji|jeofizik|petrol|enerji|robot|yapay zeka|yapay zekâ|siber|ağ teknolojileri|kontrol|otomasyon|uçak|havacılık|uzay|gemi|deniz ulaştırma|teknoloji|teknolojisi|programcı|elektrik-elektronik|nükleer|tekstil müh/,
  },
  {
    kategori: "Sağlık & Tıp",
    kural:
      /\btıp\b|diş|hemşire|eczacı|fizyoterapi|beslenme|diyetetik|anestezi|görüntüleme|laboratuvar|dokümantasyon|acil|paramedik|optisyen|ameliyathane|sağlık|odyoloji|dil ve konuşma|ebelik|veteriner|biyomedikal|ortez|protez|diyaliz|patoloji|radyoterapi|perfüzyon|çocuk gelişimi|yaşlı bakım|podoloji|ağız ve diş|tıbbi/,
  },
  {
    kategori: "Hukuk & Siyasal",
    kural:
      /hukuk|adalet|siyaset|kamu yönetim|uluslararası ilişki|siyasal|güvenlik|ceza infaz|milletlerarası|diplomasi/,
  },
  {
    kategori: "İktisat & İşletme",
    kural:
      /işletme|iktisat|ekonomi|maliye|muhasebe|finans|bankacılık|sigortacılık|dış ticaret|lojistik|pazarlama|yönetim bilişim|insan kaynak|çalışma ekonomisi|uluslararası ticaret|bankacılık ve sigortacılık|halkla ilişkiler|reklamcılık|emlak|menkul|gümrük|büro yönetim|yönetici asistan/,
  },
  {
    kategori: "Eğitim & Öğretmenlik",
    kural:
      /öğretmen|öğretmenliği|eğitim|okul öncesi|rehberlik ve psikolojik|çocuk gelişimi|pedagoji|özel eğitim/,
  },
  {
    kategori: "Mimarlık & Tasarım",
    kural:
      /mimar|iç mimar|peyzaj|şehir ve bölge|tasarım|endüstriyel tasarım|moda|iç mekan/,
  },
  {
    kategori: "Fen & Temel Bilimler",
    kural:
      /matematik|fizik|kimya|biyoloji|istatistik|moleküler|genetik|biyoteknoloji|astronomi|aktüerya|fen bilim|bilim/,
  },
  {
    kategori: "Sosyal & Beşeri Bilimler",
    kural:
      /sosyoloji|tarih|coğrafya|felsefe|edebiyat|dil ve edebiyat|filoloji|arkeoloji|antropoloji|ilahiyat|din kültürü|dilbilim|sosyal hizmet|mütercim|çeviribilim|tercümanlık|türk dili|dünya dilleri|sanat tarihi|halkbilim|dinî/,
  },
  {
    kategori: "Sanat, Medya & İletişim",
    kural:
      /gazetecilik|iletişim|radyo|televizyon|sinema|görsel|grafik|müzik|resim|heykel|sahne|tiyatro|oyunculuk|fotoğraf|animasyon|seramik|güzel sanatlar|medya|yeni medya|halkla ilişkiler ve tanıtım|reklam|film|sanat ve tasarım/,
  },
  {
    kategori: "Psikoloji & Danışmanlık",
    kural: /psikoloji|psikolojik danışma|rehberlik ve psikolojik|davranış/,
  },
  {
    kategori: "Turizm & Gastronomi",
    kural:
      /turizm|gastronomi|mutfak|aşçılık|otel|seyahat|rekreasyon|konaklama|ikram|sivil havacılık kabin/,
  },
  {
    kategori: "Tarım & Doğa",
    kural:
      /ziraat|tarım|tarla|bahçe|bitki|hayvan|su ürünleri|gıda|orman|çevre|balıkçılık|peyzaj|tohum|toprak|zootekni/,
  },
];

/** Verilen program adının girdiği tüm kategorileri döner (0..n). */
export function kategoriBul(isim: string): Kategori[] {
  const lower = isim.toLocaleLowerCase("tr-TR");
  const sonuc: Kategori[] = [];
  for (const { kategori, kural } of KATEGORI_KURALLARI) {
    if (kural.test(lower)) sonuc.push(kategori);
  }
  return sonuc;
}

/** Bir programın seçili kategorilerden en az biriyle eşleşip eşleşmediği. */
export function kategoriEslesir(isim: string, secililer: string[]): boolean {
  if (secililer.length === 0) return true;
  const kats = kategoriBul(isim);
  return kats.some((k) => secililer.includes(k));
}
