import { z } from "zod";

export const phoneSchema = z
  .string()
  .min(10, "Укажите телефон")
  .max(32, "Проверьте телефон")
  .regex(/^[0-9+()\-\s]+$/, "Проверьте телефон");

export const bookingSchema = z.object({
  name: z.string().min(2, "Укажите имя").max(80),
  phone: phoneSchema,
  email: z.string().email().optional().or(z.literal("")),
  date: z.string().min(1, "Выберите дату").max(32),
  time: z.string().min(1, "Выберите время").max(32),
  guests: z.coerce.number().int().min(1).max(20),
  comment: z.string().max(1000).optional(),
  consent: z.literal(true),
  website: z.string().max(0).optional()
});

export const checkoutSchema = z.object({
  clientRef: z.string().uuid().optional(),
  name: z.string().min(2).max(80),
  phone: phoneSchema,
  email: z.string().email().optional().or(z.literal("")),
  method: z.enum(["delivery", "pickup"]),
  address: z.string().max(300).optional(),
  apartment: z.string().max(32).optional(),
  floor: z.string().max(32).optional(),
  intercom: z.string().max(32).optional(),
  courierComment: z.string().max(1000).optional(),
  orderComment: z.string().max(160).optional(),
  desiredTime: z.string().max(64).optional(),
  offerConsent: z.literal(true),
  personalDataConsent: z.literal(true),
  marketingConsent: z.boolean().optional(),
  items: z.array(z.object({ dishId: z.string().min(1).max(100), quantity: z.number().int().positive().max(99), priceSnapshot: z.number().finite().nonnegative().optional() })).min(1).max(50)
});
