import type { Locale } from '@/lib/i18n';

type Audience = 'admin' | 'vendor' | 'customer' | 'affiliate';
type LocaleMap = { he: Record<string, string>; en: Record<string, string> };
type AudienceMap = {
  admin: LocaleMap;
  vendor?: LocaleMap;
  customer?: LocaleMap;
  affiliate?: LocaleMap;
};

/** Per-enum audience label maps. Keys match the DB enum values. */
const ENUM_LABELS: Record<string, AudienceMap> = {
  deal_state: {
    admin: {
      he: {
        DRAFT: 'טיוטה',
        UNDER_REVIEW: 'בבדיקה',
        PENDING_APPROVAL: 'ממתין לאישור',
        ACTIVE: 'פעיל',
        PAUSED: 'מושהה',
        SOLD_OUT: 'אזל המלאי',
        EXPIRED: 'פג תוקף',
        REJECTED: 'נדחה',
        ARCHIVED: 'בארכיון',
      },
      en: {
        DRAFT: 'Draft',
        UNDER_REVIEW: 'Under Review',
        PENDING_APPROVAL: 'Pending Approval',
        ACTIVE: 'Active',
        PAUSED: 'Paused',
        SOLD_OUT: 'Sold Out',
        EXPIRED: 'Expired',
        REJECTED: 'Rejected',
        ARCHIVED: 'Archived',
      },
    },
    vendor: {
      he: {
        DRAFT: 'טיוטה',
        UNDER_REVIEW: 'בבדיקה',
        PENDING_APPROVAL: 'ממתין לאישור',
        ACTIVE: 'פעיל',
        PAUSED: 'מושהה',
        SOLD_OUT: 'אזל',
        EXPIRED: 'פג תוקף',
        REJECTED: 'נדחה',
        ARCHIVED: 'בארכיון',
      },
      en: {
        DRAFT: 'Draft',
        UNDER_REVIEW: 'Under Review',
        PENDING_APPROVAL: 'Pending Approval',
        ACTIVE: 'Active',
        PAUSED: 'Paused',
        SOLD_OUT: 'Sold Out',
        EXPIRED: 'Expired',
        REJECTED: 'Rejected',
        ARCHIVED: 'Archived',
      },
    },
    customer: {
      he: { ACTIVE: 'זמין', PAUSED: 'לא זמין', SOLD_OUT: 'נגמר', EXPIRED: 'הסתיים' },
      en: { ACTIVE: 'Available', PAUSED: 'Unavailable', SOLD_OUT: 'Sold Out', EXPIRED: 'Ended' },
    },
  },
  return_status: {
    admin: {
      he: {
        requested: 'ממתין לתגובת ספק',
        approved: 'מאושר — ממתין למשלוח הקונה',
        in_transit: 'במעבר',
        received: 'התקבל אצל הספק',
        refunded: 'בוצע החזר כספי',
        denied: 'נדחה',
        cancelled: 'בוטל',
        expired: 'פג תוקף',
      },
      en: {
        requested: 'Awaiting vendor response',
        approved: 'Approved — awaiting buyer shipment',
        in_transit: 'In transit',
        received: 'Received by vendor',
        refunded: 'Refunded',
        denied: 'Denied',
        cancelled: 'Cancelled',
        expired: 'Expired',
      },
    },
    vendor: {
      he: {
        requested: 'ממתין לתגובתך',
        approved: 'אושר — ממתין למשלוח מהקונה',
        in_transit: 'בדרך אליך',
        received: 'התקבל אצלך — ממתין לבדיקה',
        refunded: 'הוחזר לקונה',
        denied: 'נדחה',
        cancelled: 'בוטל',
        expired: 'פג תוקף',
      },
      en: {
        requested: 'Awaiting your response',
        approved: 'Approved — awaiting buyer shipment',
        in_transit: 'On its way to you',
        received: 'Received — awaiting your inspection',
        refunded: 'Refunded to buyer',
        denied: 'Denied',
        cancelled: 'Cancelled',
        expired: 'Expired',
      },
    },
    customer: {
      he: {
        requested: 'בבדיקת ספק',
        approved: 'מאושר — שלח את הפריט',
        in_transit: 'במעבר',
        received: 'התקבל אצל הספק',
        refunded: 'הוחזר',
        denied: 'נדחה',
        cancelled: 'בוטל',
        expired: 'פג תוקף',
      },
      en: {
        requested: 'Vendor reviewing',
        approved: 'Approved — please ship',
        in_transit: 'In transit',
        received: 'Received by vendor',
        refunded: 'Refunded',
        denied: 'Denied',
        cancelled: 'Cancelled',
        expired: 'Expired',
      },
    },
  },
  promo_status: {
    admin: {
      he: {
        active: 'פעיל',
        paused: 'מושהה',
        archived: 'בארכיון',
        expired: 'פג תוקף',
      },
      en: {
        active: 'Active',
        paused: 'Paused',
        archived: 'Archived',
        expired: 'Expired',
      },
    },
    vendor: {
      he: {
        active: 'פעיל',
        paused: 'מושהה',
        archived: 'בארכיון',
        expired: 'פג תוקף',
      },
      en: {
        active: 'Active',
        paused: 'Paused',
        archived: 'Archived',
        expired: 'Expired',
      },
    },
  },
  llm_job_status: {
    admin: {
      he: {
        PENDING: 'ממתין',
        RUNNING: 'פועל',
        COMPLETED: 'הושלם',
        FAILED: 'נכשל',
        TIMED_OUT: 'פג זמן',
      },
      en: {
        PENDING: 'Pending',
        RUNNING: 'Running',
        COMPLETED: 'Completed',
        FAILED: 'Failed',
        TIMED_OUT: 'Timed Out',
      },
    },
  },
  review_type: {
    admin: {
      he: { STANDARD: 'דירוג בלבד', TECHNICAL: 'ביקורת טכנית' },
      en: { STANDARD: 'Rating only', TECHNICAL: 'Technical review' },
    },
  },
  purchase_status: {
    admin: {
      he: {
        UNREDEEMED: 'לא מומש',
        REDEEMED: 'מומש',
        EXPIRED: 'פג תוקף',
        CANCELLED: 'בוטל',
      },
      en: {
        UNREDEEMED: 'Unredeemed',
        REDEEMED: 'Redeemed',
        EXPIRED: 'Expired',
        CANCELLED: 'Cancelled',
      },
    },
    customer: {
      he: {
        UNREDEEMED: 'ממתין למימוש',
        REDEEMED: 'מומש',
        EXPIRED: 'פג תוקף',
        CANCELLED: 'בוטל',
      },
      en: {
        UNREDEEMED: 'Awaiting redemption',
        REDEEMED: 'Redeemed',
        EXPIRED: 'Expired',
        CANCELLED: 'Cancelled',
      },
    },
  },
  payment_status: {
    admin: {
      he: {
        PENDING: 'ממתין',
        COMPLETED: 'הושלם',
        REFUND_REQUESTED: 'בקשת החזר',
        REFUNDED: 'הוחזר',
        PARTIAL_REFUND: 'החזר חלקי',
        FAILED: 'נכשל',
      },
      en: {
        PENDING: 'Pending',
        COMPLETED: 'Completed',
        REFUND_REQUESTED: 'Refund requested',
        REFUNDED: 'Refunded',
        PARTIAL_REFUND: 'Partial refund',
        FAILED: 'Failed',
      },
    },
    customer: {
      he: {
        PENDING: 'ממתין לתשלום',
        COMPLETED: 'שולם',
        REFUND_REQUESTED: 'בקשת החזר',
        REFUNDED: 'הוחזר',
        PARTIAL_REFUND: 'החזר חלקי',
        FAILED: 'נכשל',
      },
      en: {
        PENDING: 'Awaiting payment',
        COMPLETED: 'Paid',
        REFUND_REQUESTED: 'Refund requested',
        REFUNDED: 'Refunded',
        PARTIAL_REFUND: 'Partial refund',
        FAILED: 'Failed',
      },
    },
  },
  offer_outcome: {
    admin: {
      he: {
        refund_full: 'החזר כספי מלא',
        refund_partial: 'החזר כספי חלקי',
        replacement: 'החלפה',
        deny: 'דחייה',
      },
      en: {
        refund_full: 'Full refund',
        refund_partial: 'Partial refund',
        replacement: 'Replacement',
        deny: 'Declined',
      },
    },
    customer: {
      he: {
        refund_full: 'החזר כספי מלא',
        refund_partial: 'החזר כספי חלקי',
        replacement: 'החלפה',
        deny: 'דחייה',
      },
      en: {
        refund_full: 'Full refund',
        refund_partial: 'Partial refund',
        replacement: 'Replacement',
        deny: 'Declined',
      },
    },
  },
  support_ticket_status: {
    customer: {
      he: {
        open: 'פתוחה',
        ai_handling: 'בטיפול AI',
        awaiting_user: 'ממתינה לתגובתך',
        escalated: 'ממתינה לנציג',
        awaiting_agent: 'ממתינה לנציג',
        human_handling: 'בטיפול נציג',
        resolved: 'נפתרה',
        closed: 'סגורה',
        reopened: 'נפתחה מחדש',
      },
      en: {
        open: 'Open',
        ai_handling: 'AI handling',
        awaiting_user: 'Awaiting your reply',
        escalated: 'Waiting for an agent',
        awaiting_agent: 'Waiting for agent',
        human_handling: 'Agent handling',
        resolved: 'Resolved',
        closed: 'Closed',
        reopened: 'Reopened',
      },
    },
    admin: {
      he: {
        open: 'פתוחה',
        ai_handling: 'בטיפול AI',
        awaiting_user: 'ממתינה ללקוח',
        escalated: 'ממתינה לנציג',
        awaiting_agent: 'ממתינה לנציג',
        human_handling: 'בטיפול נציג',
        resolved: 'נפתרה',
        closed: 'סגורה',
        reopened: 'נפתחה מחדש',
      },
      en: {
        open: 'Open',
        ai_handling: 'AI handling',
        awaiting_user: 'Awaiting customer',
        escalated: 'Waiting for agent',
        awaiting_agent: 'Waiting for agent',
        human_handling: 'Agent handling',
        resolved: 'Resolved',
        closed: 'Closed',
        reopened: 'Reopened',
      },
    },
  },
  support_ticket_category: {
    customer: {
      he: {
        account: 'חשבון',
        billing: 'חיוב ותשלומים',
        bug: 'תקלה טכנית',
        how_to: 'הסבר ושאלות',
        complaint: 'תלונה',
        other: 'אחר',
      },
      en: {
        account: 'Account',
        billing: 'Billing & payments',
        bug: 'Bug / technical issue',
        how_to: 'How to / question',
        complaint: 'Complaint',
        other: 'Other',
      },
    },
    admin: {
      he: {
        account: 'חשבון',
        billing: 'חיוב ותשלומים',
        bug: 'תקלה טכנית',
        how_to: 'הסבר ושאלות',
        complaint: 'תלונה',
        other: 'אחר',
      },
      en: {
        account: 'Account',
        billing: 'Billing & payments',
        bug: 'Bug / technical issue',
        how_to: 'How to / question',
        complaint: 'Complaint',
        other: 'Other',
      },
    },
  },
  support_ticket_priority: {
    customer: {
      he: {
        low: 'נמוכה',
        normal: 'רגילה',
        high: 'גבוהה',
        urgent: 'דחופה',
      },
      en: {
        low: 'Low',
        normal: 'Normal',
        high: 'High',
        urgent: 'Urgent',
      },
    },
    admin: {
      he: {
        low: 'נמוכה',
        normal: 'רגילה',
        high: 'גבוהה',
        urgent: 'דחופה',
      },
      en: {
        low: 'Low',
        normal: 'Normal',
        high: 'High',
        urgent: 'Urgent',
      },
    },
  },
  affiliate_activity_status: {
    admin: {
      he: { pending: 'ממתין', matured: 'זמין למשיכה', swept: 'קוזז' },
      en: { pending: 'Pending', matured: 'Available', swept: 'Offset' },
    },
    vendor: {
      he: { pending: 'ממתין', matured: 'זמין למשיכה', swept: 'קוזז' },
      en: { pending: 'Pending', matured: 'Available', swept: 'Offset' },
    },
    customer: {
      he: { pending: 'ממתין', matured: 'זמין', swept: 'קוזז' },
      en: { pending: 'Pending', matured: 'Available', swept: 'Offset' },
    },
    affiliate: {
      he: { pending: 'ממתין', matured: 'זמין למשיכה', swept: 'קוזז' },
      en: { pending: 'Pending', matured: 'Available', swept: 'Offset' },
    },
  },
};

/**
 * Returns a localized display label for a registered enum value.
 * Falls back to admin map if audience has no entry.
 * Falls back to raw value if enum is unregistered.
 */
export function enumLabel(
  enumName: string,
  value: string,
  locale: Locale = 'he',
  audience: Audience = 'admin',
): string {
  const audienceMap = ENUM_LABELS[enumName];
  if (!audienceMap) return value;
  const localeMap = (audienceMap[audience] ?? audienceMap.admin) as LocaleMap;
  return localeMap[locale]?.[value] ?? (audienceMap.admin as LocaleMap)[locale]?.[value] ?? value;
}
