import { defineEnum } from './define-enum';

export const PAYMENT_STATUS = [
  'PENDING',
  'COMPLETED',
  'REFUNDED',
  'PARTIAL_REFUND',
  'REFUND_REQUESTED',
  'FAILED',
] as const;

export const REDEEMABLE_PAYMENT_STATUSES = ['paid', 'fulfilled', 'completed'] as const;

export const REFUNDABLE_PAYMENT_STATUSES = [
  ...REDEEMABLE_PAYMENT_STATUSES,
  'unfulfillable',
  'partially_refunded',
] as const;

export const paymentStatus = defineEnum({
  name: 'payment_status',
  values: PAYMENT_STATUS,
  meta: {
    PENDING: { order: 0, labelKey: 'pending' },
    COMPLETED: { order: 1, labelKey: 'completed' },
    REFUNDED: { order: 2, labelKey: 'refunded' },
    PARTIAL_REFUND: { order: 3, labelKey: 'partial_refund' },
    REFUND_REQUESTED: { order: 4, labelKey: 'refund_requested' },
    FAILED: { order: 5, labelKey: 'failed' },
  },
});

export type PaymentStatus = (typeof PAYMENT_STATUS)[number];

/** Domain projection excluding terminal FAILED (not surfaced in buyer-facing flows). */
export type PaymentStatusActive = Exclude<PaymentStatus, 'FAILED'>;
