import { z } from "zod" import type { Dictionary } from "@/i18n/dictionaries" export type AssetSchemaCopy = Dictionary["inventory"]["assets"]["schema"] const defaultAssetSchemaCopy: AssetSchemaCopy = { itemRequired: "Item is required", serialNumberRequired: "Serial number is required", idRequired: "ID is required", statusRequired: "Status is required", invalidCreateStatus: "Status must be Available or Assigned", invalidUpdateStatus: "Invalid status", } const createAssetStatuses = ["AVAILABLE", "ASSIGNED"] as const const updateAssetStatuses = [ "AVAILABLE", "ASSIGNED", "RESERVED", "IN_REPAIR", "BROKEN", "STOLEN", "DISPOSED", ] as const function buildAssetBaseSchema(copy: AssetSchemaCopy) { return z.object({ id: z.string().optional(), itemId: z.string().min(1, { error: copy.itemRequired, }), serialNumber: z.string().min(1, { error: copy.serialNumberRequired, }), deliveryNote: z.string().optional(), notes: z.string().optional(), personId: z.string().optional(), }) } export const assetSchema = buildAssetBaseSchema(defaultAssetSchemaCopy) export function buildCreateAssetSchema(copy: AssetSchemaCopy) { return buildAssetBaseSchema(copy).extend({ status: z.enum(createAssetStatuses, { error: (issue) => issue.input === undefined || issue.input === "" ? copy.statusRequired : copy.invalidCreateStatus, }), }) } export const createAssetSchema = buildCreateAssetSchema(defaultAssetSchemaCopy) export type CreateAssetFormType = z.infer export function buildUpdateAssetSchema(copy: AssetSchemaCopy) { return buildAssetBaseSchema(copy).extend({ id: z.string().min(1, { error: copy.idRequired, }), status: z.enum(updateAssetStatuses, { error: (issue) => issue.input === undefined || issue.input === "" ? copy.statusRequired : copy.invalidUpdateStatus, }), }) } export const updateAssetSchema = buildUpdateAssetSchema(defaultAssetSchemaCopy) export type UpdateAssetFormType = z.infer