export type PublicSiteLanguage = 'en' | 'fr' | 'ar'

export const PUBLIC_SITE_LANGUAGE_COOKIE = 'public-site-language'

export function isPublicSiteLanguage(value: string | null | undefined): value is PublicSiteLanguage {
  return value === 'en' || value === 'fr' || value === 'ar'
}

export type PublicSiteDictionary = {
  lang: string
  dir: 'ltr' | 'rtl'
  siteNameFallback: string
  rentalCompanyFallback: string
  nav: {
    about: string
    vehicles: string
    offers: string
    pricing: string
    blog: string
    contact: string
    bookCar: string
    siteNavigation: string
  }
  home: {
    heroTitleFallback: string
    heroDescription: string
    viewOffers: string
    viewPricing: string
    contactCompany: string
    heroImageMissing: string
    activeOffers: string
    seeAllOffers: string
    noActiveOffers: string
    publishedVehicles: string
    available: (count: number) => string
    viewVehicle: string
  }
  about: {
    eyebrow: string
    defaultTagline: string
    location: string
    phone: string
    email: string
    whatsapp: string
    locationMissing: string
    phoneMissing: string
    emailMissing: string
    whatsappMissing: string
    heroImageMissing: string
    directBookingTitle: string
    directBookingBody: string
    publishedFleetTitle: string
    publishedFleetBody: string
    marketplaceReadyTitle: string
    marketplaceReadyBody: string
    companyDetails: string
    companyAddressMissing: string
  }
  contact: {
    title: string
    description: string
  }
  offers: {
    title: string
    empty: string
    noDescription: string
    bookOffer: string
  }
  pricing: {
    eyebrow: string
    title: string
    description: string
    popular: string
    acceptedPaymentMethods: string
    paymentsDescription: string
    faq: {
      paymentMethodsQuestion: string
      paymentMethodsAnswer: string
      connectPaymentsQuestion: string
      connectPaymentsAnswer: string
      supportedCurrenciesQuestion: string
      supportedCurrenciesAnswer: string
    }
    plans: {
      starterDescription: string
      growthDescription: string
      proDescription: string
      starterFeatures: string[]
      growthFeatures: string[]
      proFeatures: string[]
    }
  }
  blog: {
    eyebrow: string
    title: string
    description: string
    draftPlaceholder: string
    posts: Array<{
      title: string
      excerpt: string
      category: string
    }>
  }
  vehicles: {
    title: string
    available: (count: number) => string
    noVehiclesTitle: string
    noVehiclesBody: string
    clearFilters: string
    noPhoto: string
    seats: (count: number) => string
    perDay: string
    viewDetails: string
    filters: {
      title: string
      clearAll: string
      category: string
      transmission: string
      maxPricePerDay: string
      upTo: string
    }
    unavailable: {
      eyebrow: string
      title: string
      body: string
      backHome: string
    }
    detail: {
      perDay: string
      bookNow: string
      back: string
      availableFrom: string
      unavailableNoDate: string
    }
  }
  booking: {
    loadingForm: string
    eyebrow: string
    title: string
    steps: {
      selectDates: string
      driverDetails: string
      reviewBooking: string
      payment: string
    }
    loadingVehicle: string
    vehicleNotFound: string
    vehicleLoadError: string
    vehicleAvailableFrom: (date: string) => string
    vehicleUnavailableNoDate: string
    bookingOptionsLoadError: string
    startDate: string
    endDate: string
    continueToDriverDetails: string
    firstName: string
    lastName: string
    email: string
    phone: string
    driverLicense: string
    nationality: string
    dateOfBirth: string
    licenseIssued: string
    licenseExpiry: string
    insuranceAndPickupPolicies: string
    insuranceHint: string
    requiredCoverage: string
    none: string
    noOptionalInsurance: string
    additionalDriver: string
    charge: string
    promoCode: string
    enterCode: string
    apply: string
    appliedPromo: (title: string, discount: number) => string
    back: string
    reviewBookingCta: string
    confirmReservation: string
    processing: string
    reservationCreated: string
    manualApprovalRequired: string
    totalDue: string
    currency: string
    paymentMethod: string
    paymentMethods: {
      amanpay: { title: string; description: string }
      paypal: { title: string; description: string }
      cash: { title: string; description: string }
    }
    redirectingToPayment: string
    confirmPayAtPickup: string
    payWith: (provider: string) => string
    summary: {
      vehicle: string
      dates: string
      primaryDriver: string
      email: string
      driverLicense: string
      licenseExpiry: string
      additionalDriver: string
      promoCode: string
      discount: (discount: number) => string
      total: string
    }
    validation: {
      pickStartDate: string
      pickEndDate: string
      endDateAfterStart: string
      firstNameRequired: string
      lastNameRequired: string
      validEmailRequired: string
      driverLicenseRequired: string
      dateOfBirthRequired: string
      licenseExpiryRequired: string
      licenseIssueDateRequired: string
      additionalDriverFirstNameRequired: string
      additionalDriverLastNameRequired: string
      additionalDriverLicenseRequired: string
    }
    promo: {
      invalid: string
      unavailable: string
    }
    submit: {
      failed: string
      network: string
    }
    payment: {
      initiateFailed: string
      network: string
    }
  }
  confirmation: {
    eyebrow: string
    title: string
    description: string
    bookingSummary: string
    vehicle: string
    customer: string
    email: string
    dates: string
    total: string
    reference: string
    status: string
    browseMoreVehicles: string
    backHome: string
  }
}

const dictionaries: Record<PublicSiteLanguage, PublicSiteDictionary> = {
  en: {
    lang: 'en',
    dir: 'ltr',
    siteNameFallback: 'Company site',
    rentalCompanyFallback: 'Rental company',
    nav: {
      about: 'About',
      vehicles: 'Vehicles',
      offers: 'Offers',
      pricing: 'Pricing',
      blog: 'Blog',
      contact: 'Contact',
      bookCar: 'Book a car',
      siteNavigation: 'Site navigation',
    },
    home: {
      heroTitleFallback: 'Book directly with the rental company.',
      heroDescription: 'This branded site handles booking and payment directly. Marketplace discovery routes renters here for checkout.',
      viewOffers: 'View offers',
      viewPricing: 'View pricing',
      contactCompany: 'Contact company',
      heroImageMissing: 'Hero image not configured yet.',
      activeOffers: 'Active offers',
      seeAllOffers: 'See all offers',
      noActiveOffers: 'No active offers right now.',
      publishedVehicles: 'Published vehicles',
      available: (count) => `${count} available`,
      viewVehicle: 'View vehicle',
    },
    about: {
      eyebrow: 'About',
      defaultTagline: 'This company uses RentalDriveGo to publish vehicles, run bookings, and accept direct rental payments.',
      location: 'Location',
      phone: 'Phone',
      email: 'Email',
      whatsapp: 'WhatsApp',
      locationMissing: 'Location not published yet',
      phoneMissing: 'Phone not published yet',
      emailMissing: 'Email not published yet',
      whatsappMissing: 'WhatsApp not published yet',
      heroImageMissing: 'Add a hero image in branding settings to personalize this page.',
      directBookingTitle: 'Direct booking',
      directBookingBody: 'Renters book and pay directly on the company site instead of checking out on the marketplace.',
      publishedFleetTitle: 'Published fleet',
      publishedFleetBody: 'Vehicle photos, pricing, and availability are managed from the private dashboard and published here automatically.',
      marketplaceReadyTitle: 'Marketplace ready',
      marketplaceReadyBody: 'Marketplace discovery redirects qualified renters into this branded site for final booking and payment.',
      companyDetails: 'Company details',
      companyAddressMissing: 'A public address has not been configured yet.',
    },
    contact: {
      title: 'Contact',
      description: "Use the company's public contact details or extend this page to call the `/site/:slug/contact` endpoint.",
    },
    offers: {
      title: 'Offers',
      empty: 'No offers are available right now.',
      noDescription: 'No description provided.',
      bookOffer: 'Book with this offer',
    },
    pricing: {
      eyebrow: 'Pricing',
      title: 'Plans for growing rental operations',
      description: 'Choose a plan that matches your fleet size and booking volume. The design spec supports AmanPay and PayPal, plus MAD, USD, and EUR billing.',
      popular: 'Popular',
      acceptedPaymentMethods: 'Accepted payment methods',
      paymentsDescription: 'Pay securely with AmanPay or PayPal. Supported currencies: MAD, USD, EUR.',
      faq: {
        paymentMethodsQuestion: 'Which payment methods are supported?',
        paymentMethodsAnswer: 'Companies can use AmanPay or PayPal for subscriptions, and renters pay companies directly through the company-configured payment methods.',
        connectPaymentsQuestion: 'Can I start before connecting payments?',
        connectPaymentsAnswer: 'Yes. Trialing companies can configure branding, fleet, and offers before activating their live payment setup.',
        supportedCurrenciesQuestion: 'Which currencies are supported?',
        supportedCurrenciesAnswer: 'The current design supports MAD, USD, and EUR across subscription billing and rental pricing.',
      },
      plans: {
        starterDescription: 'For smaller fleets that need direct bookings and a branded web presence.',
        growthDescription: 'For operators scaling marketing, offers, and multi-role workflows.',
        proDescription: 'For larger operators that need branding control and deeper operational flexibility.',
        starterFeatures: ['Branded booking site', 'Fleet publishing', 'Marketplace visibility', 'Basic team access'],
        growthFeatures: ['Everything in Starter', 'Featured marketplace offers', 'Advanced pricing rules', 'Expanded reporting'],
        proFeatures: ['Custom branding', 'Priority onboarding', 'Advanced operations', 'White-label polish'],
      },
    },
    blog: {
      eyebrow: 'Blog',
      title: 'Insights for rental operators',
      description: 'The design spec includes a standard blog route. This page seeds that route with editorial-style placeholders that can later be replaced by CMS-backed content.',
      draftPlaceholder: 'Draft article placeholder',
      posts: [
        {
          title: 'How direct booking changes rental margins',
          excerpt: 'Why moving renters from marketplace discovery into a branded booking experience protects pricing and customer relationships.',
          category: 'Operations',
        },
        {
          title: 'What to publish on a modern rental fleet page',
          excerpt: 'A practical checklist for vehicle photos, specs, pricing clarity, and trust signals that convert browsers into bookings.',
          category: 'Marketing',
        },
        {
          title: 'Using promotions without breaking your pricing model',
          excerpt: 'Featured offers work best when they are time-bound, measurable, and attached to actual fleet strategy.',
          category: 'Revenue',
        },
      ],
    },
    vehicles: {
      title: 'Our Fleet',
      available: (count) => `${count} vehicle${count !== 1 ? 's' : ''} available`,
      noVehiclesTitle: 'No vehicles match your filters.',
      noVehiclesBody: 'Try adjusting the category, price, or transmission filter.',
      clearFilters: 'Clear filters',
      noPhoto: 'No photo',
      seats: (count) => `${count} seats`,
      perDay: 'per day',
      viewDetails: 'View details',
      filters: {
        title: 'Filters',
        clearAll: 'Clear all',
        category: 'Category',
        transmission: 'Transmission',
        maxPricePerDay: 'Max price / day',
        upTo: 'Up to',
      },
      unavailable: {
        eyebrow: 'Site unavailable',
        title: 'Vehicle details are temporarily unavailable.',
        body: 'The public site is running, but the local database is not reachable right now.',
        backHome: 'Back to home',
      },
      detail: {
        perDay: '/ day',
        bookNow: 'Book now',
        back: 'Back',
        availableFrom: 'Available from',
        unavailableNoDate: 'This vehicle is temporarily unavailable for new reservations.',
      },
    },
    booking: {
      loadingForm: 'Loading booking form...',
      eyebrow: 'Booking flow',
      title: 'Complete your reservation',
      steps: {
        selectDates: 'Select dates',
        driverDetails: 'Driver details',
        reviewBooking: 'Review booking',
        payment: 'Payment',
      },
      loadingVehicle: 'Loading vehicle...',
      vehicleNotFound: 'Vehicle not found.',
      vehicleLoadError: 'Could not load vehicle details.',
      vehicleAvailableFrom: (date) => `This vehicle can only be reserved starting ${date}.`,
      vehicleUnavailableNoDate: 'This vehicle is temporarily unavailable for new reservations.',
      bookingOptionsLoadError: 'Could not load booking options.',
      startDate: 'Start date',
      endDate: 'End date',
      continueToDriverDetails: 'Continue to driver details ->',
      firstName: 'First name',
      lastName: 'Last name',
      email: 'Email',
      phone: 'Phone',
      driverLicense: 'Driver license',
      nationality: 'Nationality',
      dateOfBirth: 'Date of birth',
      licenseIssued: 'License issued',
      licenseExpiry: 'License expiry',
      insuranceAndPickupPolicies: 'Insurance and pickup policies',
      insuranceHint: 'Select optional protection before confirming your reservation.',
      requiredCoverage: 'Required coverage',
      none: 'None',
      noOptionalInsurance: 'No optional insurance add-ons are available for this company.',
      additionalDriver: 'Additional driver',
      charge: 'Charge',
      promoCode: 'Promo code',
      enterCode: 'Enter code',
      apply: 'Apply',
      appliedPromo: (title, discount) => `✓ "${title}" applied - ${discount}% off`,
      back: '<- Back',
      reviewBookingCta: 'Review booking ->',
      confirmReservation: 'Confirm reservation',
      processing: 'Processing...',
      reservationCreated: '✓ Reservation created - choose how you would like to pay',
      manualApprovalRequired: 'Driver license review is required before online payment. You can confirm with pay-at-pickup or wait for staff approval.',
      totalDue: 'Total due',
      currency: 'Currency',
      paymentMethod: 'Payment method',
      paymentMethods: {
        amanpay: { title: 'AmanPay', description: 'Secure online payment via AmanPay' },
        paypal: { title: 'PayPal', description: 'Pay with your PayPal account or card' },
        cash: { title: 'Pay at pickup', description: 'Pay cash or by card when you pick up the vehicle' },
      },
      redirectingToPayment: 'Redirecting to payment...',
      confirmPayAtPickup: 'Confirm - pay at pickup',
      payWith: (provider) => `Pay with ${provider} ->`,
      summary: {
        vehicle: 'Vehicle',
        dates: 'Dates',
        primaryDriver: 'Primary driver',
        email: 'Email',
        driverLicense: 'Driver license',
        licenseExpiry: 'License expiry',
        additionalDriver: 'Additional driver',
        promoCode: 'Promo code',
        discount: (discount) => `Discount (${discount}%)`,
        total: 'Total',
      },
      validation: {
        pickStartDate: 'Pick a start date.',
        pickEndDate: 'Pick an end date.',
        endDateAfterStart: 'End date must be after start date.',
        firstNameRequired: 'First name required.',
        lastNameRequired: 'Last name required.',
        validEmailRequired: 'Valid email required.',
        driverLicenseRequired: 'Driver license required.',
        dateOfBirthRequired: 'Date of birth required.',
        licenseExpiryRequired: 'License expiry required.',
        licenseIssueDateRequired: 'License issue date required.',
        additionalDriverFirstNameRequired: 'Additional driver first name required.',
        additionalDriverLastNameRequired: 'Additional driver last name required.',
        additionalDriverLicenseRequired: 'Additional driver license required.',
      },
      promo: {
        invalid: 'Invalid or expired promo code.',
        unavailable: 'Could not validate promo code. Please try again.',
      },
      submit: {
        failed: 'Booking failed. Please try again.',
        network: 'Network error. Please check your connection and try again.',
      },
      payment: {
        initiateFailed: 'Payment could not be initiated.',
        network: 'Network error. Please try again.',
      },
    },
    confirmation: {
      eyebrow: 'Reservation saved',
      title: 'Booking request received.',
      description: 'The reservation has been created in draft status and will be confirmed by staff or after payment.',
      bookingSummary: 'Booking summary',
      vehicle: 'Vehicle',
      customer: 'Customer',
      email: 'Email',
      dates: 'Dates',
      total: 'Total',
      reference: 'Reference',
      status: 'Status',
      browseMoreVehicles: 'Browse more vehicles',
      backHome: 'Back to home',
    },
  },
  fr: {
    lang: 'fr',
    dir: 'ltr',
    siteNameFallback: "Site de l'entreprise",
    rentalCompanyFallback: 'Société de location',
    nav: {
      about: 'À propos',
      vehicles: 'Véhicules',
      offers: 'Offres',
      pricing: 'Tarifs',
      blog: 'Blog',
      contact: 'Contact',
      bookCar: 'Réserver une voiture',
      siteNavigation: 'Navigation du site',
    },
    home: {
      heroTitleFallback: "Réservez directement auprès de l'entreprise de location.",
      heroDescription: 'Ce site de marque gère directement la réservation et le paiement. La découverte sur la marketplace redirige les locataires ici pour finaliser la commande.',
      viewOffers: 'Voir les offres',
      viewPricing: 'Voir les tarifs',
      contactCompany: "Contacter l'entreprise",
      heroImageMissing: "L'image principale n'est pas encore configurée.",
      activeOffers: 'Offres actives',
      seeAllOffers: 'Voir toutes les offres',
      noActiveOffers: "Aucune offre active pour le moment.",
      publishedVehicles: 'Véhicules publiés',
      available: (count) => `${count} disponible${count > 1 ? 's' : ''}`,
      viewVehicle: 'Voir le véhicule',
    },
    about: {
      eyebrow: 'À propos',
      defaultTagline: 'Cette entreprise utilise RentalDriveGo pour publier ses véhicules, gérer les réservations et accepter des paiements directs.',
      location: 'Localisation',
      phone: 'Téléphone',
      email: 'E-mail',
      whatsapp: 'WhatsApp',
      locationMissing: 'Localisation non publiée',
      phoneMissing: 'Téléphone non publié',
      emailMissing: 'E-mail non publié',
      whatsappMissing: 'WhatsApp non publié',
      heroImageMissing: 'Ajoutez une image principale dans les paramètres de marque pour personnaliser cette page.',
      directBookingTitle: 'Réservation directe',
      directBookingBody: "Les locataires réservent et paient directement sur le site de l'entreprise au lieu de finaliser sur la marketplace.",
      publishedFleetTitle: 'Flotte publiée',
      publishedFleetBody: 'Les photos, tarifs et disponibilités des véhicules sont gérés depuis le tableau de bord privé et publiés ici automatiquement.',
      marketplaceReadyTitle: 'Prêt pour la marketplace',
      marketplaceReadyBody: 'La découverte sur la marketplace redirige les locataires qualifiés vers ce site de marque pour la réservation finale et le paiement.',
      companyDetails: "Détails de l'entreprise",
      companyAddressMissing: "Aucune adresse publique n'a encore été configurée.",
    },
    contact: {
      title: 'Contact',
      description: "Utilisez les coordonnées publiques de l'entreprise ou étendez cette page pour appeler l'endpoint `/site/:slug/contact`.",
    },
    offers: {
      title: 'Offres',
      empty: "Aucune offre n'est disponible pour le moment.",
      noDescription: 'Aucune description fournie.',
      bookOffer: 'Réserver avec cette offre',
    },
    pricing: {
      eyebrow: 'Tarifs',
      title: 'Des formules pour faire grandir votre activité',
      description: 'Choisissez une formule adaptée à la taille de votre flotte et à votre volume de réservations. La spécification prend en charge AmanPay et PayPal, ainsi que la facturation en MAD, USD et EUR.',
      popular: 'Populaire',
      acceptedPaymentMethods: 'Moyens de paiement acceptés',
      paymentsDescription: 'Payez en toute sécurité avec AmanPay ou PayPal. Devises prises en charge : MAD, USD, EUR.',
      faq: {
        paymentMethodsQuestion: 'Quels moyens de paiement sont pris en charge ?',
        paymentMethodsAnswer: "Les entreprises peuvent utiliser AmanPay ou PayPal pour les abonnements, et les locataires paient directement l'entreprise via les méthodes configurées par celle-ci.",
        connectPaymentsQuestion: 'Puis-je commencer avant de connecter les paiements ?',
        connectPaymentsAnswer: "Oui. Les entreprises en essai peuvent configurer leur marque, leur flotte et leurs offres avant d'activer leur configuration de paiement en direct.",
        supportedCurrenciesQuestion: 'Quelles devises sont prises en charge ?',
        supportedCurrenciesAnswer: 'Le design actuel prend en charge MAD, USD et EUR pour la facturation des abonnements et les tarifs de location.',
      },
      plans: {
        starterDescription: 'Pour les petites flottes qui ont besoin de réservations directes et d’une présence web de marque.',
        growthDescription: 'Pour les opérateurs qui développent leur marketing, leurs offres et leurs workflows multi-rôles.',
        proDescription: 'Pour les grands opérateurs qui ont besoin de contrôle de marque et d’une flexibilité opérationnelle plus profonde.',
        starterFeatures: ['Site de réservation de marque', 'Publication de flotte', 'Visibilité marketplace', "Accès d'équipe basique"],
        growthFeatures: ['Tout le contenu de Starter', 'Offres marketplace mises en avant', 'Règles tarifaires avancées', 'Reporting élargi'],
        proFeatures: ['Marque personnalisée', 'Onboarding prioritaire', 'Opérations avancées', 'Finition white-label'],
      },
    },
    blog: {
      eyebrow: 'Blog',
      title: 'Analyses pour les opérateurs de location',
      description: 'La spécification inclut une route blog standard. Cette page alimente cette route avec des espaces réservés éditoriaux qui pourront ensuite être remplacés par un contenu relié à un CMS.',
      draftPlaceholder: "Brouillon d'article",
      posts: [
        {
          title: 'Comment la réservation directe change les marges',
          excerpt: 'Pourquoi déplacer les locataires de la découverte marketplace vers une expérience de réservation de marque protège les prix et la relation client.',
          category: 'Opérations',
        },
        {
          title: "Que publier sur une page de flotte moderne",
          excerpt: 'Une checklist pratique pour les photos, spécifications, clarté des prix et signaux de confiance qui convertissent les visiteurs en réservations.',
          category: 'Marketing',
        },
        {
          title: 'Utiliser des promotions sans casser votre modèle tarifaire',
          excerpt: 'Les offres mises en avant fonctionnent mieux lorsqu’elles sont limitées dans le temps, mesurables et alignées sur une vraie stratégie de flotte.',
          category: 'Revenus',
        },
      ],
    },
    vehicles: {
      title: 'Notre flotte',
      available: (count) => `${count} véhicule${count > 1 ? 's' : ''} disponible${count > 1 ? 's' : ''}`,
      noVehiclesTitle: 'Aucun véhicule ne correspond à vos filtres.',
      noVehiclesBody: 'Essayez de modifier le filtre de catégorie, de prix ou de transmission.',
      clearFilters: 'Effacer les filtres',
      noPhoto: 'Pas de photo',
      seats: (count) => `${count} places`,
      perDay: 'par jour',
      viewDetails: 'Voir les détails',
      filters: {
        title: 'Filtres',
        clearAll: 'Tout effacer',
        category: 'Catégorie',
        transmission: 'Transmission',
        maxPricePerDay: 'Prix max / jour',
        upTo: "Jusqu'à",
      },
      unavailable: {
        eyebrow: 'Site indisponible',
        title: 'Les détails du véhicule sont temporairement indisponibles.',
        body: 'Le site public fonctionne, mais la base de données locale est actuellement inaccessible.',
        backHome: "Retour à l'accueil",
      },
      detail: {
        perDay: '/ jour',
        bookNow: 'Réserver maintenant',
        back: 'Retour',
        availableFrom: 'Disponible à partir du',
        unavailableNoDate: 'Ce véhicule est temporairement indisponible pour les nouvelles réservations.',
      },
    },
    booking: {
      loadingForm: 'Chargement du formulaire...',
      eyebrow: 'Parcours de réservation',
      title: 'Finalisez votre réservation',
      steps: {
        selectDates: 'Choisir les dates',
        driverDetails: 'Informations conducteur',
        reviewBooking: 'Vérifier la réservation',
        payment: 'Paiement',
      },
      loadingVehicle: 'Chargement du véhicule...',
      vehicleNotFound: 'Véhicule introuvable.',
      vehicleLoadError: 'Impossible de charger les détails du véhicule.',
      vehicleAvailableFrom: (date) => `Ce véhicule ne peut être réservé qu’à partir du ${date}.`,
      vehicleUnavailableNoDate: 'Ce véhicule est temporairement indisponible pour les nouvelles réservations.',
      bookingOptionsLoadError: 'Impossible de charger les options de réservation.',
      startDate: 'Date de début',
      endDate: 'Date de fin',
      continueToDriverDetails: 'Continuer vers les informations conducteur ->',
      firstName: 'Prénom',
      lastName: 'Nom',
      email: 'E-mail',
      phone: 'Téléphone',
      driverLicense: 'Permis de conduire',
      nationality: 'Nationalité',
      dateOfBirth: 'Date de naissance',
      licenseIssued: 'Permis délivré le',
      licenseExpiry: 'Expiration du permis',
      insuranceAndPickupPolicies: 'Assurance et politiques de remise',
      insuranceHint: 'Sélectionnez une protection optionnelle avant de confirmer votre réservation.',
      requiredCoverage: 'Couverture obligatoire',
      none: 'Aucune',
      noOptionalInsurance: "Aucune assurance optionnelle n'est disponible pour cette entreprise.",
      additionalDriver: 'Conducteur additionnel',
      charge: 'Frais',
      promoCode: 'Code promo',
      enterCode: 'Entrer le code',
      apply: 'Appliquer',
      appliedPromo: (title, discount) => `✓ "${title}" appliqué - ${discount}% de réduction`,
      back: '<- Retour',
      reviewBookingCta: 'Vérifier la réservation ->',
      confirmReservation: 'Confirmer la réservation',
      processing: 'Traitement...',
      reservationCreated: '✓ Réservation créée - choisissez votre mode de paiement',
      manualApprovalRequired: 'La vérification du permis est requise avant le paiement en ligne. Vous pouvez confirmer avec paiement au retrait ou attendre la validation du personnel.',
      totalDue: 'Total à payer',
      currency: 'Devise',
      paymentMethod: 'Mode de paiement',
      paymentMethods: {
        amanpay: { title: 'AmanPay', description: 'Paiement en ligne sécurisé via AmanPay' },
        paypal: { title: 'PayPal', description: 'Payez avec votre compte PayPal ou votre carte' },
        cash: { title: 'Paiement au retrait', description: 'Payez en espèces ou par carte lors de la récupération du véhicule' },
      },
      redirectingToPayment: 'Redirection vers le paiement...',
      confirmPayAtPickup: 'Confirmer - payer au retrait',
      payWith: (provider) => `Payer avec ${provider} ->`,
      summary: {
        vehicle: 'Véhicule',
        dates: 'Dates',
        primaryDriver: 'Conducteur principal',
        email: 'E-mail',
        driverLicense: 'Permis',
        licenseExpiry: 'Expiration du permis',
        additionalDriver: 'Conducteur additionnel',
        promoCode: 'Code promo',
        discount: (discount) => `Réduction (${discount}%)`,
        total: 'Total',
      },
      validation: {
        pickStartDate: 'Choisissez une date de début.',
        pickEndDate: 'Choisissez une date de fin.',
        endDateAfterStart: 'La date de fin doit être après la date de début.',
        firstNameRequired: 'Le prénom est requis.',
        lastNameRequired: 'Le nom est requis.',
        validEmailRequired: 'Un e-mail valide est requis.',
        driverLicenseRequired: 'Le permis de conduire est requis.',
        dateOfBirthRequired: 'La date de naissance est requise.',
        licenseExpiryRequired: "La date d'expiration du permis est requise.",
        licenseIssueDateRequired: 'La date de délivrance du permis est requise.',
        additionalDriverFirstNameRequired: 'Le prénom du conducteur additionnel est requis.',
        additionalDriverLastNameRequired: 'Le nom du conducteur additionnel est requis.',
        additionalDriverLicenseRequired: 'Le permis du conducteur additionnel est requis.',
      },
      promo: {
        invalid: 'Code promo invalide ou expiré.',
        unavailable: 'Impossible de valider le code promo. Réessayez.',
      },
      submit: {
        failed: 'La réservation a échoué. Réessayez.',
        network: 'Erreur réseau. Vérifiez votre connexion puis réessayez.',
      },
      payment: {
        initiateFailed: 'Le paiement n’a pas pu être démarré.',
        network: 'Erreur réseau. Réessayez.',
      },
    },
    confirmation: {
      eyebrow: 'Réservation enregistrée',
      title: 'Demande de réservation reçue.',
      description: 'La réservation a été créée en brouillon et sera confirmée par le personnel ou après paiement.',
      bookingSummary: 'Résumé de réservation',
      vehicle: 'Véhicule',
      customer: 'Client',
      email: 'E-mail',
      dates: 'Dates',
      total: 'Total',
      reference: 'Référence',
      status: 'Statut',
      browseMoreVehicles: 'Voir plus de véhicules',
      backHome: "Retour à l'accueil",
    },
  },
  ar: {
    lang: 'ar',
    dir: 'rtl',
    siteNameFallback: 'موقع الشركة',
    rentalCompanyFallback: 'شركة تأجير',
    nav: {
      about: 'من نحن',
      vehicles: 'المركبات',
      offers: 'العروض',
      pricing: 'الأسعار',
      blog: 'المدونة',
      contact: 'اتصل بنا',
      bookCar: 'احجز سيارة',
      siteNavigation: 'روابط الموقع',
    },
    home: {
      heroTitleFallback: 'احجز مباشرة مع شركة التأجير.',
      heroDescription: 'هذا الموقع المخصص للعلامة التجارية يدير الحجز والدفع مباشرة. الاكتشاف عبر المنصة يحول المستأجرين إلى هنا لإتمام الحجز.',
      viewOffers: 'عرض العروض',
      viewPricing: 'عرض الأسعار',
      contactCompany: 'التواصل مع الشركة',
      heroImageMissing: 'لم يتم إعداد صورة رئيسية بعد.',
      activeOffers: 'العروض النشطة',
      seeAllOffers: 'عرض كل العروض',
      noActiveOffers: 'لا توجد عروض نشطة حالياً.',
      publishedVehicles: 'المركبات المنشورة',
      available: (count) => `${count} متاح`,
      viewVehicle: 'عرض المركبة',
    },
    about: {
      eyebrow: 'من نحن',
      defaultTagline: 'تستخدم هذه الشركة RentalDriveGo لنشر المركبات وإدارة الحجوزات وقبول مدفوعات الإيجار المباشرة.',
      location: 'الموقع',
      phone: 'الهاتف',
      email: 'البريد الإلكتروني',
      whatsapp: 'واتساب',
      locationMissing: 'لم يتم نشر الموقع بعد',
      phoneMissing: 'لم يتم نشر الهاتف بعد',
      emailMissing: 'لم يتم نشر البريد الإلكتروني بعد',
      whatsappMissing: 'لم يتم نشر واتساب بعد',
      heroImageMissing: 'أضف صورة رئيسية من إعدادات العلامة التجارية لتخصيص هذه الصفحة.',
      directBookingTitle: 'حجز مباشر',
      directBookingBody: 'يقوم المستأجرون بالحجز والدفع مباشرة على موقع الشركة بدلاً من إتمام العملية في المنصة.',
      publishedFleetTitle: 'أسطول منشور',
      publishedFleetBody: 'تتم إدارة صور المركبات والأسعار والتوفر من لوحة التحكم الخاصة ونشرها هنا تلقائياً.',
      marketplaceReadyTitle: 'جاهز للمنصة',
      marketplaceReadyBody: 'الاكتشاف عبر المنصة يوجه المستأجرين المؤهلين إلى هذا الموقع المخصص لإتمام الحجز والدفع.',
      companyDetails: 'تفاصيل الشركة',
      companyAddressMissing: 'لم يتم إعداد عنوان عام بعد.',
    },
    contact: {
      title: 'اتصل بنا',
      description: 'استخدم بيانات الاتصال العامة للشركة أو وسّع هذه الصفحة لاستدعاء نقطة النهاية `/site/:slug/contact`.',
    },
    offers: {
      title: 'العروض',
      empty: 'لا توجد عروض متاحة حالياً.',
      noDescription: 'لا يوجد وصف متاح.',
      bookOffer: 'احجز بهذا العرض',
    },
    pricing: {
      eyebrow: 'الأسعار',
      title: 'خطط تناسب نمو عمليات التأجير',
      description: 'اختر الخطة التي تناسب حجم أسطولك وحجم الحجوزات. يدعم التصميم AmanPay وPayPal إلى جانب الفوترة بعملات MAD وUSD وEUR.',
      popular: 'الأكثر شيوعاً',
      acceptedPaymentMethods: 'وسائل الدفع المقبولة',
      paymentsDescription: 'ادفع بأمان عبر AmanPay أو PayPal. العملات المدعومة: MAD وUSD وEUR.',
      faq: {
        paymentMethodsQuestion: 'ما وسائل الدفع المدعومة؟',
        paymentMethodsAnswer: 'يمكن للشركات استخدام AmanPay أو PayPal للاشتراكات، بينما يدفع المستأجرون مباشرة للشركات عبر الوسائل التي تضبطها الشركة.',
        connectPaymentsQuestion: 'هل يمكنني البدء قبل ربط وسائل الدفع؟',
        connectPaymentsAnswer: 'نعم. يمكن للشركات في الفترة التجريبية إعداد العلامة التجارية والأسطول والعروض قبل تفعيل الدفع المباشر.',
        supportedCurrenciesQuestion: 'ما العملات المدعومة؟',
        supportedCurrenciesAnswer: 'يدعم التصميم الحالي MAD وUSD وEUR عبر فوترة الاشتراكات وتسعير الإيجارات.',
      },
      plans: {
        starterDescription: 'للأساطيل الصغيرة التي تحتاج إلى حجوزات مباشرة وحضور ويب مخصص للعلامة التجارية.',
        growthDescription: 'للمشغلين الذين يوسعون التسويق والعروض وتدفقات العمل متعددة الأدوار.',
        proDescription: 'للمشغلين الأكبر الذين يحتاجون إلى تحكم أعمق بالعلامة التجارية ومرونة تشغيلية أكبر.',
        starterFeatures: ['موقع حجز مخصص', 'نشر الأسطول', 'الظهور في المنصة', 'وصول أساسي للفريق'],
        growthFeatures: ['كل ما في Starter', 'عروض مميزة في المنصة', 'قواعد تسعير متقدمة', 'تقارير موسعة'],
        proFeatures: ['علامة تجارية مخصصة', 'تهيئة أولوية', 'عمليات متقدمة', 'لمسة وايت ليبل'],
      },
    },
    blog: {
      eyebrow: 'المدونة',
      title: 'رؤى لمشغلي التأجير',
      description: 'يتضمن التصميم مساراً قياسياً للمدونة. تملأ هذه الصفحة هذا المسار بمحتوى تمهيدي يمكن استبداله لاحقاً بمحتوى من نظام إدارة محتوى.',
      draftPlaceholder: 'مسودة مقال',
      posts: [
        {
          title: 'كيف يغير الحجز المباشر هوامش الربح',
          excerpt: 'نقل المستأجرين من الاكتشاف عبر المنصة إلى تجربة حجز تحمل علامتك يحمي التسعير وعلاقة العميل.',
          category: 'العمليات',
        },
        {
          title: 'ماذا تنشر في صفحة أسطول حديثة',
          excerpt: 'قائمة عملية لصور المركبات والمواصفات ووضوح الأسعار وعناصر الثقة التي تحول الزائر إلى حجز.',
          category: 'التسويق',
        },
        {
          title: 'استخدام العروض دون إفساد نموذج التسعير',
          excerpt: 'تعمل العروض المميزة بشكل أفضل عندما تكون محددة زمنياً وقابلة للقياس ومرتبطة باستراتيجية أسطول حقيقية.',
          category: 'الإيرادات',
        },
      ],
    },
    vehicles: {
      title: 'أسطولنا',
      available: (count) => `${count} مركبة متاحة`,
      noVehiclesTitle: 'لا توجد مركبات تطابق عوامل التصفية.',
      noVehiclesBody: 'حاول تعديل فلاتر الفئة أو السعر أو ناقل الحركة.',
      clearFilters: 'مسح الفلاتر',
      noPhoto: 'لا توجد صورة',
      seats: (count) => `${count} مقاعد`,
      perDay: 'في اليوم',
      viewDetails: 'عرض التفاصيل',
      filters: {
        title: 'الفلاتر',
        clearAll: 'مسح الكل',
        category: 'الفئة',
        transmission: 'ناقل الحركة',
        maxPricePerDay: 'الحد الأقصى للسعر / يوم',
        upTo: 'حتى',
      },
      unavailable: {
        eyebrow: 'الموقع غير متاح',
        title: 'تفاصيل المركبة غير متاحة مؤقتاً.',
        body: 'الموقع العام يعمل، لكن قاعدة البيانات المحلية غير متاحة حالياً.',
        backHome: 'العودة للرئيسية',
      },
      detail: {
        perDay: '/ يوم',
        bookNow: 'احجز الآن',
        back: 'رجوع',
        availableFrom: 'متاح ابتداءً من',
        unavailableNoDate: 'هذه المركبة غير متاحة مؤقتاً للحجوزات الجديدة.',
      },
    },
    booking: {
      loadingForm: 'جاري تحميل نموذج الحجز...',
      eyebrow: 'خطوات الحجز',
      title: 'أكمل حجزك',
      steps: {
        selectDates: 'اختيار التواريخ',
        driverDetails: 'بيانات السائق',
        reviewBooking: 'مراجعة الحجز',
        payment: 'الدفع',
      },
      loadingVehicle: 'جاري تحميل المركبة...',
      vehicleNotFound: 'المركبة غير موجودة.',
      vehicleLoadError: 'تعذر تحميل تفاصيل المركبة.',
      vehicleAvailableFrom: (date) => `يمكن حجز هذه المركبة ابتداءً من ${date}.`,
      vehicleUnavailableNoDate: 'هذه المركبة غير متاحة مؤقتاً للحجوزات الجديدة.',
      bookingOptionsLoadError: 'تعذر تحميل خيارات الحجز.',
      startDate: 'تاريخ البداية',
      endDate: 'تاريخ النهاية',
      continueToDriverDetails: 'المتابعة إلى بيانات السائق ->',
      firstName: 'الاسم الأول',
      lastName: 'اسم العائلة',
      email: 'البريد الإلكتروني',
      phone: 'الهاتف',
      driverLicense: 'رخصة القيادة',
      nationality: 'الجنسية',
      dateOfBirth: 'تاريخ الميلاد',
      licenseIssued: 'تاريخ إصدار الرخصة',
      licenseExpiry: 'تاريخ انتهاء الرخصة',
      insuranceAndPickupPolicies: 'التأمين وسياسات الاستلام',
      insuranceHint: 'اختر حماية اختيارية قبل تأكيد الحجز.',
      requiredCoverage: 'التغطية المطلوبة',
      none: 'لا يوجد',
      noOptionalInsurance: 'لا توجد إضافات تأمين اختيارية متاحة لهذه الشركة.',
      additionalDriver: 'سائق إضافي',
      charge: 'الرسوم',
      promoCode: 'رمز ترويجي',
      enterCode: 'أدخل الرمز',
      apply: 'تطبيق',
      appliedPromo: (title, discount) => `✓ تم تطبيق "${title}" بخصم ${discount}%`,
      back: '<- رجوع',
      reviewBookingCta: 'مراجعة الحجز ->',
      confirmReservation: 'تأكيد الحجز',
      processing: 'جارٍ المعالجة...',
      reservationCreated: '✓ تم إنشاء الحجز - اختر طريقة الدفع',
      manualApprovalRequired: 'مراجعة رخصة القيادة مطلوبة قبل الدفع الإلكتروني. يمكنك التأكيد مع الدفع عند الاستلام أو انتظار موافقة الموظفين.',
      totalDue: 'المبلغ المستحق',
      currency: 'العملة',
      paymentMethod: 'طريقة الدفع',
      paymentMethods: {
        amanpay: { title: 'AmanPay', description: 'دفع إلكتروني آمن عبر AmanPay' },
        paypal: { title: 'PayPal', description: 'ادفع عبر حساب PayPal أو البطاقة' },
        cash: { title: 'الدفع عند الاستلام', description: 'ادفع نقداً أو بالبطاقة عند استلام المركبة' },
      },
      redirectingToPayment: 'جارٍ التحويل إلى الدفع...',
      confirmPayAtPickup: 'تأكيد - الدفع عند الاستلام',
      payWith: (provider) => `ادفع عبر ${provider} ->`,
      summary: {
        vehicle: 'المركبة',
        dates: 'التواريخ',
        primaryDriver: 'السائق الرئيسي',
        email: 'البريد الإلكتروني',
        driverLicense: 'رخصة القيادة',
        licenseExpiry: 'انتهاء الرخصة',
        additionalDriver: 'سائق إضافي',
        promoCode: 'الرمز الترويجي',
        discount: (discount) => `الخصم (${discount}%)`,
        total: 'الإجمالي',
      },
      validation: {
        pickStartDate: 'اختر تاريخ البداية.',
        pickEndDate: 'اختر تاريخ النهاية.',
        endDateAfterStart: 'يجب أن يكون تاريخ النهاية بعد تاريخ البداية.',
        firstNameRequired: 'الاسم الأول مطلوب.',
        lastNameRequired: 'اسم العائلة مطلوب.',
        validEmailRequired: 'البريد الإلكتروني الصحيح مطلوب.',
        driverLicenseRequired: 'رخصة القيادة مطلوبة.',
        dateOfBirthRequired: 'تاريخ الميلاد مطلوب.',
        licenseExpiryRequired: 'تاريخ انتهاء الرخصة مطلوب.',
        licenseIssueDateRequired: 'تاريخ إصدار الرخصة مطلوب.',
        additionalDriverFirstNameRequired: 'الاسم الأول للسائق الإضافي مطلوب.',
        additionalDriverLastNameRequired: 'اسم العائلة للسائق الإضافي مطلوب.',
        additionalDriverLicenseRequired: 'رخصة السائق الإضافي مطلوبة.',
      },
      promo: {
        invalid: 'الرمز الترويجي غير صالح أو منتهي.',
        unavailable: 'تعذر التحقق من الرمز الترويجي. حاول مرة أخرى.',
      },
      submit: {
        failed: 'فشل الحجز. حاول مرة أخرى.',
        network: 'خطأ في الشبكة. تحقق من الاتصال ثم حاول مرة أخرى.',
      },
      payment: {
        initiateFailed: 'تعذر بدء عملية الدفع.',
        network: 'خطأ في الشبكة. حاول مرة أخرى.',
      },
    },
    confirmation: {
      eyebrow: 'تم حفظ الحجز',
      title: 'تم استلام طلب الحجز.',
      description: 'تم إنشاء الحجز بحالة مسودة وسيتم تأكيده من قبل الموظفين أو بعد الدفع.',
      bookingSummary: 'ملخص الحجز',
      vehicle: 'المركبة',
      customer: 'العميل',
      email: 'البريد الإلكتروني',
      dates: 'التواريخ',
      total: 'الإجمالي',
      reference: 'المرجع',
      status: 'الحالة',
      browseMoreVehicles: 'تصفح المزيد من المركبات',
      backHome: 'العودة للرئيسية',
    },
  },
}

export function getPublicSiteDictionary(language: PublicSiteLanguage): PublicSiteDictionary {
  return dictionaries[language]
}
