/**
 * پیکربندی وضعیت نوبت‌ها — رنگ‌ها عیناً از طرح tauri (`clinic-pro-tauri`
 * `src/components/turns/Timeline.jsx` → `statusConfig`) برداشته شده و به وضعیت‌های
 * واقعی بک‌اند (Appointment::STATUS_*) نگاشت شده‌اند. لیبل‌ها فارسی مطابق همان طرح.
 */
export interface TurnStatusConfig {
  label: string;
  bgColor: string;
  borderColor: string;
  dotColor: string;
  textColor: string;
}

/** یک وضعیت = یک توکن؛ خود توکن با تم عوض می‌شود، پس جفت light/dark لازم نیست. */
const of = (fg: string, bg: string): Omit<TurnStatusConfig, 'label'> => ({
  bgColor: `var(--${bg})`, borderColor: `var(--${fg})`,
  dotColor: `var(--${fg})`, textColor: `var(--${fg})`,
});

// وضعیت‌های بک‌اند → توکن‌های تم (هیوی طرح tauri حفظ شده است).
const STATUS: Record<string, TurnStatusConfig> = {
  pending:             { label: 'ثبت شده',        ...of('info', 'info-bg') },
  confirmed:           { label: 'قطعی شده',       ...of('primary', 'primary-soft') },
  following_up:        { label: 'در حال پیگیری',  ...of('accent', 'accent-bg') },
  salon:               { label: 'سالن',            ...of('violet', 'violet-bg') },
  completed:           { label: 'ویزیت شده',      ...of('success', 'success-bg') },
  cancelled_by_doctor: { label: 'لغو شده',         ...of('danger', 'danger-bg') },
  cancelled_by_user:   { label: 'لغو توسط بیمار', ...of('danger', 'danger-bg') },
  no_show:             { label: 'غیبت',            ...of('text-3', 'surface-2') },
  expired:             { label: 'منقضی',           ...of('text-3', 'surface-2') },
};

// اسلات خالی (نوبت جدید) — tauri: empty.
export const EMPTY_SLOT_CONFIG: TurnStatusConfig = {
  label: 'نوبت جدید', ...of('primary', 'primary-soft'),
};

export function turnStatusConfig(status: string): TurnStatusConfig {
  return STATUS[status] ?? EMPTY_SLOT_CONFIG;
}

/** وضعیت‌هایی که نوبت را «لغوشده» می‌کنند (برای منطق تایم‌لاین/آمار). */
export const CANCELLED_STATUSES = new Set([
  'cancelled_by_doctor', 'cancelled_by_user', 'cancelled_by_admin',
  'auto_cancel_unpaid', 'no_show', 'expired',
]);
