import { jatengRegions, semarangDistricts, slugify } from "./regions";
import { site } from "./site";

export type FaqItem = { question: string; answer: string };

const districtAngles: Record<string, { intro: string; audience: string; linkText: string }> = {
  mijen: {
    intro: "Informasi lokal ini membantu keluarga, donatur, relawan, dan masyarakat di Kecamatan Mijen menemukan rujukan panti asuhan serta kanal resmi Al Jannah di Kota Semarang.",
    audience: "keluarga dan masyarakat wilayah Mijen yang membutuhkan informasi sosial, kunjungan, maupun rujukan donasi yang dapat diverifikasi",
    linkText: "wilayah Semarang bagian barat-daya",
  },
  gunungpati: {
    intro: "Halaman Kecamatan Gunungpati disusun sebagai pintu masuk informasi panti asuhan, kegiatan sosial, dan rujukan donasi yang terhubung ke struktur Kota Semarang.",
    audience: "masyarakat Gunungpati, komunitas pendidikan, mahasiswa, serta calon relawan yang mencari kanal komunikasi resmi",
    linkText: "wilayah Gunungpati dan sekitarnya",
  },
  banyumanik: {
    intro: "Untuk pencarian panti asuhan di Banyumanik, halaman ini merangkum cara memeriksa informasi lembaga, menghubungi Al Jannah, dan menjelajahi kelurahan di kecamatan yang sama.",
    audience: "masyarakat Banyumanik yang ingin memperoleh informasi panti, kegiatan sosial, atau penyaluran bantuan secara bertanggung jawab",
    linkText: "kawasan Banyumanik",
  },
  gajahmungkur: {
    intro: "Halaman lokal Gajahmungkur memberi konteks pencarian panti asuhan di Kota Semarang sekaligus mengarahkan pembaca ke informasi program dan donasi resmi Al Jannah.",
    audience: "warga Gajahmungkur yang mencari informasi pengasuhan, donasi, kunjungan, atau kegiatan sosial",
    linkText: "wilayah Gajahmungkur",
  },
  "semarang-selatan": {
    intro: "Pencarian panti asuhan di Semarang Selatan sering membutuhkan informasi yang ringkas namun dapat ditelusuri. Halaman ini menghubungkan pembaca dengan halaman kelurahan dan informasi resmi Al Jannah.",
    audience: "warga Semarang Selatan, komunitas, sekolah, dan calon donatur",
    linkText: "wilayah Semarang Selatan",
  },
  candisari: {
    intro: "Halaman Kecamatan Candisari menempatkan informasi panti asuhan dalam struktur wilayah yang jelas agar pembaca mudah berpindah dari kecamatan ke kelurahan dan ke profil lembaga.",
    audience: "masyarakat Candisari yang ingin mencari rujukan panti atau menyalurkan dukungan sosial",
    linkText: "wilayah Candisari",
  },
  tembalang: {
    intro: "Informasi panti asuhan di Tembalang disusun untuk membantu masyarakat, mahasiswa, komunitas kampus, dan calon relawan menemukan kanal yang relevan tanpa mengandalkan informasi yang tidak terverifikasi.",
    audience: "masyarakat Tembalang dan komunitas pendidikan yang memiliki perhatian pada pendidikan serta pengasuhan anak",
    linkText: "wilayah Tembalang",
  },
  pedurungan: {
    intro: "Halaman Kecamatan Pedurungan menjadi hub lokal untuk pencarian panti asuhan, informasi donasi, dan akses ke halaman kelurahan di Pedurungan.",
    audience: "masyarakat Pedurungan yang membutuhkan informasi sosial dan kanal resmi untuk berdonasi atau berkomunikasi",
    linkText: "wilayah Pedurungan",
  },
  genuk: {
    intro: "Halaman Genuk membantu pembaca menavigasi informasi panti asuhan berdasarkan kelurahan sekaligus menyediakan rujukan ke profil, program, dan kontak resmi Al Jannah Semarang.",
    audience: "masyarakat Genuk, komunitas lokal, dan calon donatur",
    linkText: "wilayah Genuk",
  },
  gayamsari: {
    intro: "Untuk warga Gayamsari yang mencari panti asuhan di Semarang, halaman ini menggabungkan navigasi wilayah dengan panduan sederhana memeriksa informasi lembaga dan donasi.",
    audience: "masyarakat Gayamsari yang ingin berkunjung, berdonasi, atau mencari informasi program sosial",
    linkText: "wilayah Gayamsari",
  },
  "semarang-timur": {
    intro: "Halaman Semarang Timur disiapkan untuk pencarian lokal mengenai panti asuhan, dukungan anak yatim, dan informasi sosial yang terhubung dengan halaman kelurahan.",
    audience: "warga Semarang Timur dan komunitas yang mencari informasi panti asuhan secara lebih terstruktur",
    linkText: "wilayah Semarang Timur",
  },
  "semarang-utara": {
    intro: "Pusat informasi Semarang Utara ini membantu pembaca menemukan halaman panti asuhan berbasis kelurahan dan kanal resmi Al Jannah untuk pertanyaan program maupun donasi.",
    audience: "masyarakat Semarang Utara yang memerlukan rujukan informasi sosial dan panti asuhan",
    linkText: "wilayah Semarang Utara",
  },
  "semarang-tengah": {
    intro: "Halaman Semarang Tengah mengorganisasi pencarian panti asuhan berdasarkan kelurahan dan menyediakan jalur menuju informasi resmi Al Jannah Semarang.",
    audience: "warga, pekerja, komunitas, dan calon donatur di Semarang Tengah",
    linkText: "wilayah pusat Kota Semarang",
  },
  "semarang-barat": {
    intro: "Halaman Semarang Barat menjadi penghubung antara pencarian panti asuhan berbasis kelurahan dengan informasi program, kontak, dan donasi Al Jannah Semarang.",
    audience: "masyarakat Semarang Barat yang mencari informasi panti, kegiatan sosial, dan rujukan donasi",
    linkText: "wilayah Semarang Barat",
  },
  tugu: {
    intro: `Kecamatan Tugu memiliki relevansi langsung dengan Al Jannah karena Panti Asuhan Al Jannah beralamat di ${site.address}. Halaman ini menjadi pusat informasi lokal paling dekat dengan lokasi lembaga.`,
    audience: "warga Tugu dan masyarakat yang ingin berkunjung atau menghubungi Panti Asuhan Al Jannah secara langsung",
    linkText: "wilayah tempat Al Jannah berada",
  },
  ngaliyan: {
    intro: "Ngaliyan menjadi salah satu wilayah penting dalam struktur informasi lokal Al Jannah. Halaman ini membantu pembaca menelusuri kelurahan, program, donasi, dan jalur komunikasi resmi.",
    audience: "warga Ngaliyan, keluarga, komunitas pendidikan, dan calon donatur",
    linkText: "wilayah Ngaliyan yang terhubung dengan kawasan Tugu",
  },
};

const localIntentVariants = [
  "mencari lembaga sosial yang dapat dihubungi secara resmi",
  "menyalurkan donasi untuk pendidikan dan kebutuhan pengasuhan anak",
  "mengetahui program pembinaan anak yatim, piatu, dan dhuafa",
  "merencanakan kunjungan atau kegiatan sosial dengan komunikasi terlebih dahulu",
  "memastikan rekening dan kontak donasi sebelum melakukan transfer",
  "mencari rujukan informasi panti asuhan berdasarkan wilayah",
];

function hash(value: string) {
  return Array.from(value).reduce((sum, ch) => sum + ch.charCodeAt(0), 0);
}

export function districtContent(slug: string) {
  return districtAngles[slug] || {
    intro: `Halaman ini merangkum informasi panti asuhan di wilayah ${slug} dan menghubungkan pembaca ke kanal resmi Al Jannah Semarang.`,
    audience: "masyarakat Kota Semarang",
    linkText: "wilayah setempat",
  };
}

export function villageEditorial(village: string, district: string, districtSlug: string) {
  const idx = hash(`${village}-${district}`) % localIntentVariants.length;
  const next = (idx + 2) % localIntentVariants.length;
  const angle = districtContent(districtSlug);
  return {
    lead: `Bagi masyarakat Kelurahan ${village}, Kecamatan ${district}, pencarian “panti asuhan di ${village}” biasanya berkaitan dengan kebutuhan untuk ${localIntentVariants[idx]}. Halaman ini menyediakan rujukan lokal yang terhubung dengan informasi resmi Panti Asuhan Al Jannah Semarang.`,
    service: `Al Jannah berlokasi di ${site.address}. Kami tidak menyatakan memiliki cabang di Kelurahan ${village}; halaman ini dibuat sebagai informasi wilayah agar pembaca dari ${village} dapat menemukan profil lembaga, program, kontak, dan kanal donasi resmi secara lebih mudah.`,
    guidance: `Jika tujuan Anda adalah ${localIntentVariants[next]}, periksa terlebih dahulu nama lembaga, alamat, nomor kontak, tujuan program, serta rekening penerima. Untuk Al Jannah, gunakan nomor WhatsApp ${site.whatsappDisplay}, telepon ${site.phone}, atau email ${site.email}.`,
    audience: angle.audience,
  };
}

const regionIntent = [
  "mencari informasi panti asuhan yang jelas dan mudah diverifikasi",
  "menemukan rujukan donasi anak yatim dan kegiatan sosial",
  "memahami cara memilih lembaga sosial sebelum berdonasi",
  "mencari kanal komunikasi resmi lembaga panti asuhan",
  "mendapatkan informasi pendidikan dan pengasuhan anak",
];

export function jatengEditorial(regionSlug: string, regionName: string) {
  const index = jatengRegions.findIndex((r) => r.slug === regionSlug);
  const intent = regionIntent[Math.max(0, index) % regionIntent.length];
  const secondary = regionIntent[(Math.max(0, index) + 2) % regionIntent.length];
  return {
    lead: `Halaman “Panti Asuhan di ${regionName}” disusun untuk membantu masyarakat Jawa Tengah yang sedang ${intent}. Informasi regional ini juga menjadi bagian dari direktori edukatif panti asuhan yang dikelola melalui website Al Jannah Semarang.`,
    verification: `Sebelum memilih atau berdonasi kepada panti asuhan di ${regionName}, cocokkan identitas lembaga dengan alamat, kontak, pengelola, program, rekening, serta informasi publik yang tersedia. Hindari mentransfer dana hanya berdasarkan pesan berantai atau informasi yang tidak dapat ditelusuri kembali.`,
    relation: `Panti Asuhan Al Jannah tidak menyatakan memiliki cabang di ${regionName}. Lokasi Al Jannah berada di Kota Semarang. Halaman ${regionName} berfungsi sebagai konten informasi regional dan penghubung menuju sumber yang dapat diverifikasi.`,
    secondary: `Pembaca dari ${regionName} yang ingin ${secondary} dapat menggunakan panduan di website ini sebagai checklist awal sebelum menghubungi lembaga yang dituju.`,
  };
}

export function faqJson(items: FaqItem[]) {
  return {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    mainEntity: items.map((item) => ({
      "@type": "Question",
      name: item.question,
      acceptedAnswer: { "@type": "Answer", text: item.answer },
    })),
  };
}

export function relatedVillages(districtSlug: string, village: string, take = 6) {
  const district = semarangDistricts.find((d) => d.slug === districtSlug);
  if (!district) return [];
  const index = district.villages.findIndex((v) => v === village);
  return Array.from({ length: Math.min(take, Math.max(0, district.villages.length - 1)) })
    .map((_, offset) => district.villages[(index + offset + 1) % district.villages.length])
    .filter((v) => v !== village);
}

export function regionNearby(regionSlug: string, take = 6) {
  const index = jatengRegions.findIndex((r) => r.slug === regionSlug);
  if (index < 0) return [];
  return Array.from({ length: Math.min(take, jatengRegions.length - 1) })
    .map((_, offset) => jatengRegions[(index + offset + 1) % jatengRegions.length])
    .filter((r) => r.slug !== regionSlug);
}

export function villagePath(districtSlug: string, village: string) {
  return `/panti-asuhan-semarang/${districtSlug}/${slugify(village)}`;
}
