
import { z } from "zod";

const linkSchema = z.object({
  url: z.string().url("Veuillez entrer une URL valide"),
  title: z.string().min(1, "Le titre du lien est requis")
});

export const stepSchema = z.object({
  day: z.coerce.number().min(1, "Le jour est requis"),
  time: z.string(),
  location: z.string().min(1, "L'emplacement est requis"),
  activity: z.string().min(1, "L'activité est requise"),
  price: z.string().optional(),
  distance: z.string().optional(),
  link: z.string().optional().refine((val) => {
    if (!val) return true;
    try {
      new URL(val);
      return true;
    } catch {
      return false;
    }
  }, "Veuillez entrer une URL valide"),
  links: z.array(linkSchema).optional(),
  stepType: z.enum(['transport', 'meal', 'accommodation', 'activity', 'break', 'ticket', 'other']).default('activity'),
  startTime: z.string().optional(),
  endTime: z.string().optional(),
  description: z.string().optional(),
  // Champs spécifiques au type de transport
  transportType: z.string().optional(),
  referenceNumber: z.string().optional(), // Numéro de vol/train
  departureName: z.string().optional(),
  arrivalName: z.string().optional(),
  estimatedDuration: z.string().optional(),
  // Champs spécifiques aux repas
  restaurantName: z.string().optional(),
  cuisineType: z.string().optional(),
  budget: z.string().optional(),
  // Champs spécifiques à l'hébergement
  accommodationName: z.string().optional(),
  roomType: z.string().optional(),
  checkInTime: z.string().optional(),
  checkOutTime: z.string().optional(),
  reservationNumber: z.string().optional(),
  rating: z.number().min(0).max(5).optional(),
  // Champs spécifiques aux visites/activités
  activityType: z.string().optional(),
  guideName: z.string().optional(),
  walkingLevel: z.string().optional(),
  // Champs spécifiques aux pauses
  breakPurpose: z.string().optional(),
  // Notes internes (non visible par le voyageur)
  internalNotes: z.string().optional(),
});

export type StepFormData = z.infer<typeof stepSchema>;
