import { z } from 'zod' import type { AppSettings } from './types' export const historyPageSizeSchema=z.union([z.literal(5),z.literal(10),z.literal(20),z.literal(50)]) export const settingsSchema = z.object({ schemaVersion: z.literal(1), outputDirectory: z.string().max(1024), sealDirectory: z.string().max(1024), defaultSealId: z.string().max(260), exportPdf: z.boolean(), exportPng: z.boolean(), exportPrint: z.boolean(), receiptsPerPage: z.union([z.literal(1), z.literal(2)]), cutLine: z.boolean(), createBatchFolder: z.boolean(), openAfterExport: z.boolean(), numberPrefix: z.string().regex(/^[A-Za-z0-9_-]{1,16}$/, '编号前缀须为 1–16 位字母、数字、短横线或下划线'), defaultCashier: z.string().max(20), defaultReviewer: z.string().max(20), sealWidthMm: z.number().min(15).max(55), sealOffsetX: z.number().min(-20).max(20), sealOffsetY: z.number().min(-12).max(12), pngDpi: z.union([z.literal(150), z.literal(300)]), lastImportDirectory: z.string().max(1024), templateId: z.string().min(1).max(80), fileNamePattern:z.enum(['number_customer','customer_number','number']).default('number_customer'),historyPageSize:historyPageSizeSchema.default(5) }) export function defaultSettings(outputDirectory = ''): AppSettings { return { schemaVersion: 1, outputDirectory, sealDirectory: '', defaultSealId: '', exportPdf: true, exportPng: false, exportPrint: true, receiptsPerPage: 2, cutLine: true, createBatchFolder: true, openAfterExport: true, numberPrefix: 'SJ', defaultCashier: '', defaultReviewer: '', sealWidthMm: 35, sealOffsetX: 0, sealOffsetY: 0, pngDpi: 300, lastImportDirectory: '', templateId: 'classic-v1', fileNamePattern:'number_customer',historyPageSize:5 } } export const exportOptionsSchema = z.object({ pdf:z.boolean(), png:z.boolean(), print:z.boolean(), receiptsPerPage:z.union([z.literal(1),z.literal(2)]), cutLine:z.boolean() }).refine(v=>v.pdf||v.png||v.print, '请至少选择一种导出内容')