import { z } from 'zod'; import { baseListQuerySchema } from '@/lib/api/route-helpers'; export const ownerRefSchema = z.object({ type: z.enum(['client', 'company']), id: z.string().min(1), }); export const createYachtSchema = z.object({ name: z.string().min(1).max(200), hullNumber: z.string().optional(), registration: z.string().optional(), flag: z.string().optional(), yearBuilt: z.number().int().min(1800).max(2100).optional(), builder: z.string().optional(), model: z.string().optional(), hullMaterial: z.string().optional(), lengthFt: z.string().optional(), widthFt: z.string().optional(), draftFt: z.string().optional(), lengthM: z.string().optional(), widthM: z.string().optional(), draftM: z.string().optional(), owner: ownerRefSchema, // required; yacht must have an owner status: z.enum(['active', 'retired', 'sold_away']).optional().default('active'), notes: z.string().optional(), tagIds: z.array(z.string()).optional().default([]), }); export const updateYachtSchema = createYachtSchema.partial().omit({ owner: true }); // Owner changes go through /transfer, not PATCH. export const transferOwnershipSchema = z.object({ newOwner: ownerRefSchema, effectiveDate: z.coerce.date(), transferReason: z .enum(['sale', 'inheritance', 'gift', 'company_restructure', 'other']) .optional(), transferNotes: z.string().optional(), }); export const listYachtsQuery = baseListQuerySchema.extend({ ownerType: z.enum(['client', 'company']).optional(), ownerId: z.string().optional(), status: z.enum(['active', 'retired', 'sold_away']).optional(), search: z.string().optional(), }); export type CreateYachtInput = z.infer; export type UpdateYachtInput = z.infer; export type TransferOwnershipInput = z.infer; export type ListYachtsInput = z.infer;