/** التصنيف المالي الموحد (v8.1) — بنود المصروفات والإيرادات الأخرى
 *  تُستخدم في الخادم (API التقارير والميزانية) والواجهة (النماذج والتقارير) معاً. */

/** بنود المصروفات (Expense.kind) */
export const EXPENSE_KINDS = [
  "SALARY",
  "LECTURE_WAGE",
  "STAFF_LOAN_GIVEN",
  "ACTIVITY_LOAN_GIVEN",
  "MAINTENANCE",
  "OPERATIONAL",
  "COMPANY_INVOICE",
  "LOAN",
  "TRANSFER",
  "OTHER",
] as const;

export type ExpenseKind = (typeof EXPENSE_KINDS)[number];

export const EXPENSE_KIND_AR: Record<string, string> = {
  SALARY: "رواتب الموظفين",
  LECTURE_WAGE: "أجور المحاضرات",
  STAFF_LOAN_GIVEN: "سلف منتسبين",
  ACTIVITY_LOAN_GIVEN: "سلف نشاط",
  MAINTENANCE: "صيانة",
  OPERATIONAL: "مصاريف تشغيلية وأخرى",
  COMPANY_INVOICE: "فواتير الشركات",
  LOAN: "قروض",
  TRANSFER: "مناقلة",
  OTHER: "مصاريف مدرسية أخرى",
};

/** بنود الإيرادات الأخرى (OtherIncome.kind) */
export const OTHER_INCOME_KINDS = [
  "OTHER_SCHOOL",
  "STAFF_LOAN_REPAY",
  "ACTIVITY_LOAN_REPAY",
  "TRANSFER",
  "OTHER",
] as const;

export type OtherIncomeKind = (typeof OTHER_INCOME_KINDS)[number];

export const OTHER_INCOME_KIND_AR: Record<string, string> = {
  OTHER_SCHOOL: "واردات مدارس أخرى",
  STAFF_LOAN_REPAY: "تسديد سلف منتسبين",
  ACTIVITY_LOAN_REPAY: "تسديد سلف نشاطات",
  TRANSFER: "مناقلة",
  OTHER: "إيرادات خارجية أخرى",
};

/** بند المصروف المناسب لفئة قديمة نصية (لتصنيف السجلات القديمة تلقائياً عند العرض) */
export function inferExpenseKind(category: string): ExpenseKind {
  const c = (category || "").trim();
  if (c.includes("رواتب") || c.includes("راتب")) return "SALARY";
  if (c.includes("محاضرات") || c.includes("أجور المعلمين") || c.includes("اجور المعلمين")) return "LECTURE_WAGE";
  if (c.includes("صيانة")) return "MAINTENANCE";
  if (c.includes("شركات") || c.includes("فواتير")) return "COMPANY_INVOICE";
  return "OTHER";
}

/** التحقق من صحة بند المصروف القادم من الواجهة */
export function isValidExpenseKind(kind: unknown): kind is ExpenseKind {
  return typeof kind === "string" && (EXPENSE_KINDS as readonly string[]).includes(kind);
}

/** التحقق من صحة بند الإيراد القادم من الواجهة */
export function isValidOtherIncomeKind(kind: unknown): kind is OtherIncomeKind {
  return typeof kind === "string" && (OTHER_INCOME_KINDS as readonly string[]).includes(kind);
}
