import { z } from 'zod';

/**
 * VAT Type enum
 * Art des Mehrwertsteuer-Satzes
 */
export const VATType = {
  NotSet: 0,
  Standard: 1,
  Reduced: 2,
  SuperReduced: 4,
  Zero: 8,
  Exempt: 16,
  ReverseCharge: 32,
  MarginScheme: 64,
  Unknown: 128,
} as const;

const ALL_FLAGS = Object.values(VATType).reduce<number>((a, b) => a | b, 0);

export const VATTypeSchema = z
  .nativeEnum(VATType)
  .refine((val) => (val & ALL_FLAGS) === val, {
    message: 'Invalid VAT type',
  })
  .describe('VAT Type');

export type VATType = z.infer<typeof VATTypeSchema>;
