import z from 'zod';

export const OrderItemProcessingStatusValue = {
  NotSet: 0,
  NeuAngelegt1: 1,
  NeuAngelegt2: 2,
  NeuÜbernommen: 4,
  Geparkt: 8,
  Bestellt: 16,
  VorbereitungVersand: 32,
  Versendet: 64,
  Eingetroffen: 128,
  Abgeholt: 256,
  StorniertKunde: 512,
  Storniert: 1024,
  StorniertLieferant: 2048,
  NichtLieferbar: 4096,
  Nachbestellt: 8192,
  Zurückgegeben: 16384,
  ZumDownloadVerfügbar: 32768,
  Downloaded: 65536,
  NichtAbgeholt: 131072,
  AnsLagerNichtAbgeholt: 262144,
  Angefragt: 524288,
  WeitergeleitetIntern: 1048576,
  Überfällig: 2097152,
  Zugestellt: 4194304,
  LieferantErmittelt: 8388608,
  DerzeitNichtLieferbar: 16777216,
  Reserviert: 33554432,
  Zusammengestellt: 67108864,
  Verpackt: 134217728,
  Lieferschein: 268435456,
} as const;

export const OrderItemProcessingStatusValueSchema = z.number().refine(
  (val) => {
    // Validate that the value is a valid combination of flags
    const allFlags = Object.values(
      OrderItemProcessingStatusValue,
    ).reduce<number>((acc, flag) => acc | flag, 0);
    return (val & allFlags) === val;
  },
  {
    message: 'Invalid order item processing status value',
  },
);

export type OrderItemProcessingStatusValue = z.infer<
  typeof OrderItemProcessingStatusValueSchema
>;
