const{z}=require("zod"),wrap=body=>z.object({body:body.strict(),params:z.object({}).passthrough(),query:z.object({}).passthrough()}),id=z.string().min(1).max(180),money=z.string().regex(/^\d+(\.\d{1,2})?$/);exports.redeem=wrap(z.object({rewardId:id}));exports.referral=wrap(z.object({code:z.string().trim().min(8).max(32).transform(x=>x.toUpperCase())}));exports.adjust=wrap(z.object({userId:id,pointsDelta:z.number().int().refine(x=>x!==0),reasonCode:z.string().min(1).max(80),note:z.string().max(500).optional()}));exports.tier=wrap(z.object({code:z.string().min(1).max(60),name:z.string().min(1).max(120),status:z.enum(["ACTIVE","INACTIVE"]).default("ACTIVE"),rank:z.number().int().nonnegative(),qualificationThreshold:z.number().int().nonnegative(),benefits:z.record(z.string(),z.unknown()).optional(),sortOrder:z.number().int().default(0)}));exports.rule=wrap(z.object({sourceType:z.enum(["PURCHASE","VERIFIED_REVIEW","REFERRAL","BIRTHDAY"]),status:z.enum(["ACTIVE","INACTIVE"]),pointsPerAmount:z.number().int().positive().optional(),amountUnit:money.optional(),fixedPoints:z.number().int().positive().optional(),minimumAmount:money.optional(),maximumPoints:z.number().int().positive().optional(),expiryDays:z.number().int().positive().optional(),effectiveFrom:z.coerce.date(),effectiveTo:z.coerce.date().optional()}));exports.reward=wrap(z.object({code:z.string().min(1).max(60),name:z.string().min(1).max(160),description:z.string().optional(),type:z.enum(["COUPON","MANUAL"]),pointsCost:z.number().int().positive(),status:z.enum(["ACTIVE","INACTIVE","ARCHIVED"]),startsAt:z.coerce.date().optional(),endsAt:z.coerce.date().optional(),stockLimit:z.number().int().positive().optional(),perUserLimit:z.number().int().positive().optional(),configuration:z.record(z.string(),z.unknown()).default({})}));exports.credit=wrap(z.object({businessCustomerId:id,type:z.enum(["AUTHORIZATION","CAPTURE","RELEASE","PAYMENT","REFUND","ADJUSTMENT"]),amount:money,currency:z.string().length(3),orderId:id.optional(),paymentId:id.optional(),reference:z.string().max(160).optional()}));exports.settlement=wrap(z.object({businessCustomerId:id,periodStart:z.string().date(),periodEnd:z.string().date(),currency:z.string().length(3)}));