import { z } from 'zod';
import { baseListQuerySchema } from '@/lib/api/route-helpers';

export const RESERVATION_STATUSES = ['pending', 'active', 'ended', 'cancelled'] as const;
export const TENURE_TYPES = ['permanent', 'fixed_term', 'seasonal'] as const;

export const createPendingSchema = z.object({
  berthId: z.string().min(1),
  clientId: z.string().min(1),
  yachtId: z.string().min(1),
  interestId: z.string().optional(),
  startDate: z.coerce.date(),
  tenureType: z.enum(TENURE_TYPES).optional().default('permanent'),
  notes: z.string().optional(),
});

export const activateSchema = z.object({
  contractFileId: z.string().optional(),
  effectiveDate: z.coerce.date().optional(),
});

export const endReservationSchema = z.object({
  endDate: z.coerce.date(),
  notes: z.string().optional(),
});

export const cancelSchema = z.object({
  reason: z.string().optional(),
});

export const listReservationsSchema = baseListQuerySchema.extend({
  status: z.enum(RESERVATION_STATUSES).optional(),
  berthId: z.string().optional(),
  clientId: z.string().optional(),
  yachtId: z.string().optional(),
});

export type CreatePendingInput = z.infer<typeof createPendingSchema>;
export type ActivateInput = z.infer<typeof activateSchema>;
export type EndReservationInput = z.infer<typeof endReservationSchema>;
export type CancelInput = z.infer<typeof cancelSchema>;
export type ListReservationsInput = z.infer<typeof listReservationsSchema>;
