
export type UserRole = 'traveler' | 'planner';
export type StepValidationStatus = 'pending' | 'approved' | 'rejected';
export type DocumentCategory = import("@/services/documentCategories").DocumentCategory;

export interface StepValidation {
  travelerId: string;
  status: StepValidationStatus;
  updatedAt: string;
}

export interface TripMember {
  userId: string;
  name: string;
  email: string;
  status: 'active';
  source: 'legacy' | 'assignment' | 'invitation';
  joinedAt: string;
}

export interface TripInvitation {
  email: string;
  status: 'pending' | 'accepted' | 'expired' | 'revoked';
  createdAt: string;
  acceptedAt?: string;
  acceptedBy?: string;
}

export interface User {
  id: string;
  name: string;
  email: string;
  role: UserRole;
  avatar?: string;
  id_planner?: string | null;
}

export type StepType =
  | 'transport'
  | 'meal'
  | 'accommodation'
  | 'activity'
  | 'break'
  | 'ticket'
  | 'other';

export interface StepLink {
  url: string;
  title: string;
}

export interface TripStep {
  id: string;
  tripId: string;  // Added this property to match database structure
  day: number;
  time: string;
  location: string;
  activity: string;
  price?: number;
  distance?: string;
  links?: StepLink[]; // Using the StepLink interface for better type safety
  link?: string; // Maintained for retrocompatibility
  imagePath?: string | null;
  updatedAt?: string;
  validationStatus: StepValidationStatus;
  validations?: StepValidation[];
  isPublished?: boolean; // Nouvelle propriété pour le système de publication
  comments: Comment[];
  // Nouveaux champs pour la structure enrichie
  stepType?: StepType;
  startTime?: string;
  endTime?: string;
  description?: string;
  // Pour les transports
  transportType?: string;
  referenceNumber?: string;
  departureName?: string;
  arrivalName?: string;
  estimatedDuration?: string;
  // Pour les repas
  restaurantName?: string;
  cuisineType?: string;
  budget?: string;
  // Pour les hébergements
  accommodationName?: string;
  roomType?: string;
  checkInTime?: string;
  checkOutTime?: string;
  reservationNumber?: string;
  rating?: number;
  // Pour les activités
  activityType?: string;
  guideName?: string;
  walkingLevel?: string;
  // Pour les pauses
  breakPurpose?: string;
  // Notes internes
  internalNotes?: string;
}

export interface Comment {
  id: string;
  userId: string;
  userName: string;
  userAvatar?: string;
  content: string;
  createdAt: string;
}

export interface Document {
  id: string;
  name: string;
  type: DocumentCategory;
  url: string;
  uploadedAt: string;
  stepId?: string; // Ajout d'une référence optionnelle à une étape
  mimeType?: string;
  sizeBytes?: number;
  uploadedBy?: string;
}

export interface Trip {
  id: string;
  title: string;
  destination: string;
  startDate: string;
  endDate: string;
  plannerId: string;
  travelerId: string;
  travelerEmail: string;
  travelerName: string;
  members?: TripMember[];
  invitations?: TripInvitation[];
  invitationStatus?: "pending" | "accepted" | "expired" | "revoked" | null;
  coverUrl?: string;
  bannerUrl?: string;
  steps: TripStep[];
  documents: Document[];
}
