"use client";

/** أدوات مساعدة للواجهة الأمامية: جلب البيانات، تنسيق المبالغ والتواريخ */

export async function apiFetch<T = unknown>(url: string, options?: RequestInit): Promise<T> {
  // v8 متعدد المدارس: مدير النظام العام يعمل على مدرسة مختارة — تُمرر تلقائياً لكل طلبات البيانات
  let finalUrl = url;
  const sid = getActiveSchoolId();
  if (sid && !url.includes("schoolId=") && isSchoolScopedUrl(url)) {
    finalUrl = url + (url.includes("?") ? "&" : "?") + "schoolId=" + encodeURIComponent(sid);
  }
  const res = await fetch(finalUrl, {
    headers: { "Content-Type": "application/json" },
    ...options,
  });
  const data = await res.json().catch(() => ({}));
  if (!res.ok) {
    throw new Error((data as { error?: string }).error || "حدث خطأ في الاتصال بالخادم");
  }
  return data as T;
}

/** المسارات التي تقبل schoolId (باستثناء المصادقة والنظام وقائمة المدارس نفسها) */
function isSchoolScopedUrl(url: string): boolean {
  const path = url.split("?")[0];
  const excluded = ["/api/auth", "/api/system", "/api/schools", "/api/settings", "/api/audit-logs", "/api/translate-name"];
  return !excluded.some((p) => path.startsWith(p));
}

const ACTIVE_SCHOOL_KEY = "v8_activeSchoolId";

/** المدرسة المختارة حالياً لمدير النظام العام (localStorage) */
export function getActiveSchoolId(): string | null {
  try {
    return localStorage.getItem(ACTIVE_SCHOOL_KEY);
  } catch {
    return null;
  }
}

export function setActiveSchoolId(id: string | null) {
  try {
    if (id) localStorage.setItem(ACTIVE_SCHOOL_KEY, id);
    else localStorage.removeItem(ACTIVE_SCHOOL_KEY);
  } catch {
    /* تجاهل */
  }
}

export function formatMoney(amount: number, currency = "د.ع"): string {
  return `${new Intl.NumberFormat("en-US", { maximumFractionDigits: 0 }).format(amount)} ${currency}`;
}

export function formatDate(date: string | Date): string {
  const d = typeof date === "string" ? new Date(date) : date;
  return new Intl.DateTimeFormat("ar-IQ-u-nu-latn", {
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
  }).format(d);
}

export function formatDateTime(date: string | Date): string {
  const d = typeof date === "string" ? new Date(date) : date;
  return new Intl.DateTimeFormat("ar-IQ-u-nu-latn", {
    year: "numeric",
    month: "2-digit",
    day: "2-digit",
    hour: "2-digit",
    minute: "2-digit",
  }).format(d);
}

export function todayISO(): string {
  const d = new Date();
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
}

/** تنسيق التاريخ بتوقيت الجهاز المحلي YYYY-MM-DD (بدون انزياح المنطقة الزمنية) */
export function toLocalDateInput(d: Date): string {
  return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, "0")}-${String(d.getDate()).padStart(2, "0")}`;
}

/** بداية اليوم المحلي (منتصف الليل بتوقيت الجهاز) */
export function startOfLocalDay(d: Date = new Date()): Date {
  return new Date(d.getFullYear(), d.getMonth(), d.getDate());
}

/** المسميات الثابتة للصفوف الأساسية (تُدمج مع الصفوف المضافة من الإدارة عبر سياق الهيكل الدراسي) */
export const GRADE_LABELS: Record<string, string> = {
  PREP: "التمهيدي",
  G1: "الأول الابتدائي",
  G2: "الثاني الابتدائي",
  G3: "الثالث الابتدائي",
  G4: "الرابع الابتدائي",
  G5: "الخامس الابتدائي",
  G6: "السادس الابتدائي",
};

/** مسميات أرشيفية لصفوف حُذفت من النظام (لعرض طلبة قدماء فقط) */
export const LEGACY_GRADE_LABELS: Record<string, string> = {
  KG1: "الروضة الأولى (مؤرشفة)",
  KG2: "الروضة الثانية (مؤرشفة)",
  KG3: "الروضة الثالثة (مؤرشفة)",
  G7: "الأول المتوسط",
  G8: "الثاني المتوسط",
  G9: "الثالث المتوسط",
  G10: "الأول الإعدادي",
  G11: "الثاني الإعدادي",
  G12: "الثالث الإعدادي",
};

/** عرض مسمى الصف: الأساسي ثم المخصص ثم الأرشيفي ثم الكود الخام */
export function gradeLabel(
  code: string,
  customLabels?: Record<string, string>
): string {
  return GRADE_LABELS[code] || customLabels?.[code] || LEGACY_GRADE_LABELS[code] || code;
}

export const ROLE_AR: Record<string, string> = {
  SUPER_ADMIN: "مدير النظام العام",
  ADMIN: "مدير مدرسة",
  ACCOUNTANT: "محاسب",
  STAFF: "إداري",
};

export const ACTION_AR: Record<string, string> = {
  LOGIN: "تسجيل دخول",
  LOGIN_FAILED: "محاولة دخول فاشلة",
  LOGOUT: "تسجيل خروج",
  CREATE: "إضافة",
  UPDATE: "تعديل",
  DELETE: "حذف",
  PAYMENT: "استلام قسط",
  EXPORT: "تصدير/طباعة",
  SEED: "تهيئة النظام",
  IMPORT: "استيراد",
  RESTORE: "استعادة",
};
