import type { WizardStepId } from './reservationWizard.types'

type Language = 'en' | 'fr' | 'ar'

export function getReservationWizardCopy(language: Language) {
  return {
    en: {
      title: 'Local Booking',
      subtitle: 'Create a reservation directly from workspace without a previous online reservation.',
      loading: 'Loading reservation data...',
      cancel: 'Cancel',
      back: 'Back',
      continue: 'Continue',
      create: 'Create booking',
      creating: 'Creating...',
      edit: 'Edit',
      remove: 'Remove',
      addAnotherDriver: 'Add another driver',
      customer: 'Customer',
      identity: 'Identity',
      license: 'Driver license',
      rental: 'Rental details',
      payment: 'Payment and extras',
      review: 'Review',
      stepOf: (current: number, total: number, label: string) => `Step ${current} of ${total} · ${label}`,
      modes: { existing: 'Existing customer', new: 'New customer' },
      searchCustomer: 'Search previous customer',
      selectCustomer: 'Select customer...',
      firstName: 'First name',
      lastName: 'Last name',
      email: 'Email',
      phone: 'Phone',
      dateOfBirth: 'Date of birth',
      nationality: 'Nationality',
      fullAddress: 'Full address',
      identityDocumentNumber: 'CIN / Passport number',
      internationalLicenseNumber: 'International permit number',
      loadedCustomerData: 'Loaded from selected customer. You can correct these values before creating the reservation.',
      driverLicenseNumber: 'Driver license number',
      licenseCountry: 'License country',
      licenseIssuedAt: 'License issued at',
      licenseExpiry: 'License expiry',
      licenseCategory: 'License category',
      licenseImage: 'Driver license image',
      licenseImageHint: 'Upload a photo or scan of the primary driver license.',
      licenseImageSelected: 'Selected file',
      licenseImageCurrent: 'Current image',
      noLicenseImage: 'No license image uploaded yet.',
      licenseImageAlt: 'Driver license preview',
      startDate: 'Start date & time',
      endDate: 'End date & time',
      vehicle: 'Vehicle',
      selectVehicle: 'Select vehicle...',
      pickup: 'Pickup location',
      return: 'Return location',
      noVehicles: 'No available vehicles.',
      noAvailableStatusVehicles: 'Vehicles exist in fleet, but none are marked Available.',
      availabilityConflict: 'The selected vehicle is not available for those dates.',
      deposit: 'Deposit amount (MAD)',
      paymentMode: 'Payment mode',
      notes: 'Notes',
      notesPlaceholder: 'Optional notes...',
      additionalDriverInfo: 'Additional driver',
      summaryEmpty: 'Not provided',
      loadFailed: 'Failed to load customers/vehicles.',
      submitFailed: 'Reservation creation failed. Your draft is still available for correction or retry.',
      duplicateGuard: 'Reservation creation is already in progress.',
      confirmReplaceCustomer: 'Replace the loaded customer details with the newly selected customer?',
      leaveWarning: 'You have an unfinished reservation draft.',
      validation: {
        required: 'This field is required.',
        email: 'Enter a valid email address.',
        pastDate: 'Date must be in the past.',
        futureIssue: 'Issue date cannot be in the future.',
        expiryAfterIssue: 'Expiry date must be after the issue date.',
        expiryFuture: 'Expiry date must be in the future.',
        endAfterStart: 'End date must be after start date.',
        deposit: 'Deposit cannot be negative.',
        imageType: 'Upload a supported image file.',
        imageSize: 'Image must be 5 MB or smaller.',
      },
      paymentModes: {
        CASH: 'Cash',
        CARD: 'Card',
        BANK_TRANSFER: 'Bank transfer',
        AMANPAY: 'AmanPay',
        PAYPAL: 'PayPal',
      } as Record<string, string>,
    },
    fr: {
      title: 'Réservation locale',
      subtitle: 'Créez une réservation directement depuis l’espace, sans réservation en ligne préalable.',
      loading: 'Chargement des données de réservation...',
      cancel: 'Annuler',
      back: 'Retour',
      continue: 'Continuer',
      create: 'Créer la réservation',
      creating: 'Création...',
      edit: 'Modifier',
      remove: 'Supprimer',
      addAnotherDriver: 'Ajouter un conducteur',
      customer: 'Client',
      identity: 'Identité',
      license: 'Permis',
      rental: 'Location',
      payment: 'Paiement et options',
      review: 'Vérification',
      stepOf: (current: number, total: number, label: string) => `Étape ${current} sur ${total} · ${label}`,
      modes: { existing: 'Client existant', new: 'Nouveau client' },
      searchCustomer: 'Rechercher un client existant',
      selectCustomer: 'Sélectionner un client...',
      firstName: 'Prénom',
      lastName: 'Nom',
      email: 'Email',
      phone: 'Téléphone',
      dateOfBirth: 'Date de naissance',
      nationality: 'Nationalité',
      fullAddress: 'Adresse complète',
      identityDocumentNumber: 'N° CIN / passeport',
      internationalLicenseNumber: 'N° de permis international',
      loadedCustomerData: 'Données chargées depuis le client sélectionné. Vous pouvez les corriger avant de créer la réservation.',
      driverLicenseNumber: 'Numéro du permis',
      licenseCountry: 'Pays du permis',
      licenseIssuedAt: 'Permis délivré le',
      licenseExpiry: 'Expiration du permis',
      licenseCategory: 'Catégorie du permis',
      licenseImage: 'Image du permis',
      licenseImageHint: 'Téléversez une photo ou un scan du permis du conducteur principal.',
      licenseImageSelected: 'Fichier sélectionné',
      licenseImageCurrent: 'Image actuelle',
      noLicenseImage: 'Aucune image de permis téléversée.',
      licenseImageAlt: 'Aperçu du permis de conduire',
      startDate: 'Date et heure de départ',
      endDate: 'Date et heure de retour',
      vehicle: 'Véhicule',
      selectVehicle: 'Sélectionner un véhicule...',
      pickup: 'Lieu de départ',
      return: 'Lieu de retour',
      noVehicles: 'Aucun véhicule disponible.',
      noAvailableStatusVehicles: 'Des véhicules existent dans la flotte, mais aucun n’est marqué Disponible.',
      availabilityConflict: 'Le véhicule sélectionné n’est pas disponible pour ces dates.',
      deposit: 'Montant du dépôt (MAD)',
      paymentMode: 'Mode de paiement',
      notes: 'Notes',
      notesPlaceholder: 'Notes optionnelles...',
      additionalDriverInfo: 'Conducteur supplémentaire',
      summaryEmpty: 'Non renseigné',
      loadFailed: 'Échec du chargement des clients/véhicules.',
      submitFailed: 'La création de la réservation a échoué. Le brouillon reste disponible pour correction ou nouvel essai.',
      duplicateGuard: 'La création de réservation est déjà en cours.',
      confirmReplaceCustomer: 'Remplacer les données chargées par celles du nouveau client sélectionné ?',
      leaveWarning: 'Vous avez un brouillon de réservation non terminé.',
      validation: {
        required: 'Ce champ est obligatoire.',
        email: 'Saisissez une adresse email valide.',
        pastDate: 'La date doit être passée.',
        futureIssue: 'La date de délivrance ne peut pas être future.',
        expiryAfterIssue: 'La date d’expiration doit être après la date de délivrance.',
        expiryFuture: 'La date d’expiration doit être future.',
        endAfterStart: 'La date de fin doit être après la date de début.',
        deposit: 'Le dépôt ne peut pas être négatif.',
        imageType: 'Téléversez un fichier image pris en charge.',
        imageSize: 'L’image doit faire 5 Mo ou moins.',
      },
      paymentModes: {
        CASH: 'Espèces',
        CARD: 'Carte',
        BANK_TRANSFER: 'Virement',
        AMANPAY: 'AmanPay',
        PAYPAL: 'PayPal',
      } as Record<string, string>,
    },
    ar: {
      title: 'حجز محلي',
      subtitle: 'أنشئ حجزًا مباشرة من مساحة العمل بدون حجز إلكتروني مسبق.',
      loading: 'جارٍ تحميل بيانات الحجز...',
      cancel: 'إلغاء',
      back: 'رجوع',
      continue: 'متابعة',
      create: 'إنشاء الحجز',
      creating: 'جارٍ الإنشاء...',
      edit: 'تعديل',
      remove: 'إزالة',
      addAnotherDriver: 'إضافة سائق آخر',
      customer: 'العميل',
      identity: 'الهوية',
      license: 'رخصة القيادة',
      rental: 'تفاصيل الكراء',
      payment: 'الدفع والإضافات',
      review: 'المراجعة',
      stepOf: (current: number, total: number, label: string) => `الخطوة ${current} من ${total} · ${label}`,
      modes: { existing: 'عميل موجود', new: 'عميل جديد' },
      searchCustomer: 'ابحث عن عميل سابق',
      selectCustomer: 'اختر عميلًا...',
      firstName: 'الاسم الأول',
      lastName: 'اسم العائلة',
      email: 'البريد الإلكتروني',
      phone: 'الهاتف',
      dateOfBirth: 'تاريخ الميلاد',
      nationality: 'الجنسية',
      fullAddress: 'العنوان الكامل',
      identityDocumentNumber: 'رقم البطاقة الوطنية / جواز السفر',
      internationalLicenseNumber: 'رقم الرخصة الدولية',
      loadedCustomerData: 'تم تحميل البيانات من العميل المحدد. يمكنك تصحيحها قبل إنشاء الحجز.',
      driverLicenseNumber: 'رقم رخصة القيادة',
      licenseCountry: 'بلد الرخصة',
      licenseIssuedAt: 'تاريخ إصدار الرخصة',
      licenseExpiry: 'تاريخ انتهاء الرخصة',
      licenseCategory: 'فئة الرخصة',
      licenseImage: 'صورة رخصة القيادة',
      licenseImageHint: 'ارفع صورة أو مسحًا لرخصة السائق الأساسي.',
      licenseImageSelected: 'الملف المحدد',
      licenseImageCurrent: 'الصورة الحالية',
      noLicenseImage: 'لم يتم رفع صورة الرخصة بعد.',
      licenseImageAlt: 'معاينة رخصة القيادة',
      startDate: 'تاريخ ووقت البداية',
      endDate: 'تاريخ ووقت النهاية',
      vehicle: 'المركبة',
      selectVehicle: 'اختر مركبة...',
      pickup: 'موقع الاستلام',
      return: 'موقع التسليم',
      noVehicles: 'لا توجد مركبات متاحة.',
      noAvailableStatusVehicles: 'توجد مركبات في الأسطول، لكن لا توجد مركبة بحالة متاحة.',
      availabilityConflict: 'المركبة المحددة غير متاحة في هذه التواريخ.',
      deposit: 'مبلغ العربون (MAD)',
      paymentMode: 'طريقة الدفع',
      notes: 'ملاحظات',
      notesPlaceholder: 'ملاحظات اختيارية...',
      additionalDriverInfo: 'السائق الإضافي',
      summaryEmpty: 'غير متوفر',
      loadFailed: 'فشل تحميل العملاء/المركبات.',
      submitFailed: 'فشل إنشاء الحجز. لا يزال المسود متاحًا للتصحيح أو إعادة المحاولة.',
      duplicateGuard: 'إنشاء الحجز قيد التنفيذ بالفعل.',
      confirmReplaceCustomer: 'هل تريد استبدال بيانات العميل المحملة ببيانات العميل المحدد الجديد؟',
      leaveWarning: 'لديك مسودة حجز غير مكتملة.',
      validation: {
        required: 'هذا الحقل مطلوب.',
        email: 'أدخل بريدًا إلكترونيًا صالحًا.',
        pastDate: 'يجب أن يكون التاريخ في الماضي.',
        futureIssue: 'لا يمكن أن يكون تاريخ الإصدار في المستقبل.',
        expiryAfterIssue: 'يجب أن يكون تاريخ الانتهاء بعد تاريخ الإصدار.',
        expiryFuture: 'يجب أن يكون تاريخ الانتهاء في المستقبل.',
        endAfterStart: 'يجب أن يكون تاريخ النهاية بعد تاريخ البداية.',
        deposit: 'لا يمكن أن يكون العربون سالبًا.',
        imageType: 'ارفع ملف صورة مدعومًا.',
        imageSize: 'يجب ألا تتجاوز الصورة 5 ميغابايت.',
      },
      paymentModes: {
        CASH: 'نقدا',
        CARD: 'بطاقة',
        BANK_TRANSFER: 'تحويل بنكي',
        AMANPAY: 'AmanPay',
        PAYPAL: 'PayPal',
      } as Record<string, string>,
    },
  }[language]
}

export type ReservationWizardCopy = ReturnType<typeof getReservationWizardCopy>

export const wizardSteps: Array<{ id: WizardStepId; labelKey: keyof ReservationWizardCopy }> = [
  { id: 'customer', labelKey: 'customer' },
  { id: 'identity', labelKey: 'identity' },
  { id: 'license', labelKey: 'license' },
  { id: 'rental', labelKey: 'rental' },
  { id: 'payment', labelKey: 'payment' },
  { id: 'review', labelKey: 'review' },
]

