export type StatusColor = 'warning' | 'success' | 'info' | 'error'
export type StatusIconName =
  | 'banknote'
  | 'check-circle'
  | 'package-search'
  | 'package'
  | 'package-check'
  | 'store'
  | 'x-circle'

export interface OrderStatusData {
  code: string
  label: string
  iconName: StatusIconName
  color: StatusColor
  description: string
}

export const ORDER_STATUS_DATA: ReadonlyArray<OrderStatusData> = [
  {
    code: 'PENDING_PAYMENT',
    label: 'Ожидает оплаты',
    iconName: 'banknote',
    color: 'warning',
    description:
      'Заказ оформлен и подтверждён администратором. Оплатите онлайн через ЮKassa или дождитесь получения (для самовывоза с оплатой при получении).',
  },
  {
    code: 'PAID',
    label: 'Оплачен',
    iconName: 'check-circle',
    color: 'success',
    description: 'Оплата получена. Админ скоро возьмёт заказ в работу.',
  },
  {
    code: 'IN_PROGRESS',
    label: 'Подготовка к отправке',
    iconName: 'package-search',
    color: 'info',
    description: 'Админ готовит заказ к отправке или выдаче. Скоро статус обновится.',
  },
  {
    code: 'SHIPPED',
    label: 'Отправлен',
    iconName: 'package',
    color: 'info',
    description:
      'Заказ передан в службу доставки. Трек-номер для отслеживания(при наличии) будет указан в сообщении админа.',
  },
  {
    code: 'READY_FOR_PICKUP',
    label: 'Готов к получению',
    iconName: 'store',
    color: 'success',
    description: 'Заказ готов к самовывозу. Приезжайте в согласованное время.',
  },
  {
    code: 'DONE',
    label: 'Завершён',
    iconName: 'package-check',
    color: 'success',
    description: 'Заказ получен. Вы можете оставить отзыв в личном кабинете.',
  },
  {
    code: 'CANCELLED',
    label: 'Отменён',
    iconName: 'x-circle',
    color: 'error',
    description: 'Заказ отменён. Если оплата была произведена, средства вернутся на карту.',
  },
]

export function getOrderStatusData(code: string): OrderStatusData | undefined {
  return ORDER_STATUS_DATA.find((s) => s.code === code)
}

export const ORDER_STATUS_MAP: Record<string, string> = Object.fromEntries(
  ORDER_STATUS_DATA.map((s) => [s.code, s.label]),
)
