/**
 * Client-side mirror of mcp-server/src/legal_mcp/services/practice_area.py.
 *
 * Keep the enum values and derivation logic in sync with the backend — the
 * server is the authority, but the UI needs the labels and derivation for
 * UX (auto-fill, badges, filters). If the server adds a new practice_area
 * or subtype, extend the arrays below.
 *
 * See also: legal-ai/docs/practice-area-separation.md
 */

export type PracticeArea =
  | "appeals_committee"
  | "national_insurance"
  | "labor_law";

export type AppealSubtype =
  | "building_permit"
  | "betterment_levy"
  | "compensation_197"
  | "unknown";

export const PRACTICE_AREAS: ReadonlyArray<{
  value: PracticeArea;
  label: string;
  enabled: boolean;
}> = [
  { value: "appeals_committee",  label: "ועדת ערר",     enabled: true  },
  { value: "national_insurance", label: "ביטוח לאומי",  enabled: false },
  { value: "labor_law",          label: "דיני עבודה",   enabled: false },
];

export const APPEAL_SUBTYPES: ReadonlyArray<{
  value: AppealSubtype;
  label: string;
}> = [
  { value: "building_permit",  label: "רישוי ובנייה"      },
  { value: "betterment_levy",  label: "היטל השבחה"        },
  { value: "compensation_197", label: "פיצויים (ס' 197)"  },
  { value: "unknown",          label: "לא ידוע"           },
];

export const PRACTICE_AREA_LABELS: Record<PracticeArea, string> =
  Object.fromEntries(PRACTICE_AREAS.map((p) => [p.value, p.label])) as Record<
    PracticeArea,
    string
  >;

export const APPEAL_SUBTYPE_LABELS: Record<AppealSubtype, string> =
  Object.fromEntries(APPEAL_SUBTYPES.map((s) => [s.value, s.label])) as Record<
    AppealSubtype,
    string
  >;

/*
 * Derive the appeal_subtype from a case number. Mirrors the Python
 * `derive_subtype` in practice_area.py. The convention is the case-number
 * first digit: 1xxx → building_permit, 8xxx → betterment_levy,
 * 9xxx → compensation_197. Everything else, including non-appeals_committee
 * domains, returns 'unknown'.
 */
export function deriveSubtype(
  caseNumber: string,
  practiceArea: PracticeArea = "appeals_committee",
): AppealSubtype {
  if (practiceArea !== "appeals_committee") return "unknown";
  const first = caseNumber.trim().match(/^(\d)/)?.[1];
  if (first === "1") return "building_permit";
  if (first === "8") return "betterment_levy";
  if (first === "9") return "compensation_197";
  return "unknown";
}
