/* Uleez — shared formatting helpers & status maps */
(function () {
  /* Montant + unité, isolés en lecture gauche-à-droite.

     `Intl` sépare déjà les milliers par une espace fine insécable, donc le nombre tient. Mais
     l'unité accolée est une suite latine : sous `dir="rtl"` (back-office en arabe), elle passe
     DEVANT le montant — « 10 000 DA » se lit « DA 10 000 ». U+2066…U+2069 fige le bloc entier.
     L'unité suit la langue, comme côté app (`kDA` dans `k_format.dart`). */
  const fmtDA = (n) => {
    const lang = (window.I18N && window.I18N.lang) || 'fr';
    return '⁦' + new Intl.NumberFormat('fr-DZ').format(n) + ' ' + (lang === 'ar' ? 'دج' : 'DA') + '⁩';
  };
  const fmtNum = (n) => new Intl.NumberFormat('fr-DZ').format(n);

  const WILAYAS = [
    'Adrar','Chlef','Laghouat','Oum El Bouaghi','Batna','Béjaïa','Biskra','Béchar',
    'Blida','Bouira','Tamanrasset','Tébessa','Tlemcen','Tiaret','Tizi Ouzou','Alger',
    'Djelfa','Jijel','Sétif','Saïda','Skikda','Sidi Bel Abbès','Annaba','Guelma',
    'Constantine','Médéa','Mostaganem',"M'Sila",'Mascara','Ouargla','Oran','El Bayadh',
    'Illizi','Bordj Bou Arréridj','Boumerdès','El Tarf','Tindouf','Tissemsilt','El Oued',
    'Khenchela','Souk Ahras','Tipaza','Mila','Aïn Defla','Naâma','Aïn Témouchent',
    'Ghardaïa','Relizane','Timimoun','Bordj Badji Mokhtar','Ouled Djellal','Béni Abbès',
    'In Salah','In Guezzam','Touggourt','Djanet',"El M'Ghair",'El Meniaa',
    // Créées en 2026 (codes 59–69). Miroir de `kWilayas` côté app
    // (kerya-mobile-app/lib/core/constants/wilayas.dart) : les deux listes doivent coïncider,
    // sinon une wilaya saisie par un loueur dans l'app est introuvable au back-office.
    'Aflou','Barika','El Kantara','Bir El Ater','El Aricha','Ksar Chellala',
    'Aïn Oussara','Messaad','Ksar El Boukhari','Bou Saâda','El Abiodh Sidi Cheikh',
  // Triées par ordre ALPHABÉTIQUE pour les listes déroulantes (l'ordre des codes officiels
  // était illisible). Comparaison française insensible aux accents : « Béjaïa » avant
  // « Bouira », « Aïn Defla » avant « Alger ». Aucun code ne dépend de la position.
  ].sort((a, b) => a.localeCompare(b, 'fr', { sensitivity: 'base' }));

  // avatar color from a string
  const AVCOLORS = ['av-emerald', 'av-blue', 'av-amber', 'av-violet', 'av-rose', 'av-slate'];
  const avColor = (s) => AVCOLORS[(s || '').split('').reduce((a, c) => a + c.charCodeAt(0), 0) % AVCOLORS.length];
  const initials = (name) => name.split(' ').filter(Boolean).slice(0, 2).map(w => w[0]).join('').toUpperCase();

  // ---- Status meta ----
  //
  // `label` porte désormais une CLÉ de traduction, pas un libellé. La résolution se fait dans
  // `StatusBadge` (ui.jsx), au rendu : ces tables sont des constantes de module, évaluées une
  // seule fois au chargement, alors que la langue peut changer à tout moment sans rechargement
  // — y stocker du texte traduit le figerait sur la langue du démarrage.
  //
  // Portée maximale pour un fichier minuscule : `StatusBadge` rend ces six tables sur presque
  // tous les écrans de l'espace loueur.
  const BOOKING_STATUS = {
    pending:     { label: 'status.booking.pending', cls: 'amber' },
    confirmed:   { label: 'status.booking.confirmed', cls: 'green' },
    in_progress: { label: 'status.booking.in_progress', cls: 'blue' },
    completed:   { label: 'status.booking.completed', cls: 'blue' },
    cancelled:   { label: 'status.booking.cancelled', cls: 'gray' },
    rejected:    { label: 'status.booking.rejected', cls: 'rose' },
    deletion_requested: { label: 'status.booking.deletion_requested', cls: 'amber' },
    deleted:     { label: 'status.booking.deleted', cls: 'gray' },
  };
  const PAYMENT_STATUS = {
    paid:     { label: 'status.payment.paid', cls: 'green' },
    partial:  { label: 'status.payment.partial', cls: 'amber' },
    unpaid:   { label: 'status.payment.unpaid', cls: 'rose' },
    refunded: { label: 'status.payment.refunded', cls: 'gray' },
    none:     { label: 'status.payment.none', cls: 'gray' },
  };
  const VEHICLE_STATUS = {
    published:    { label: 'status.vehicle.published', cls: 'green' },
    unpublished:  { label: 'status.vehicle.unpublished', cls: 'gray' },
    under_review: { label: 'status.vehicle.under_review', cls: 'violet' },
    rejected:     { label: 'status.vehicle.rejected', cls: 'rose' },
    archived:     { label: 'status.vehicle.archived', cls: 'gray' },
  };
  const LESSOR_STATUS = {
    approved:  { label: 'status.lessor.approved', cls: 'green' },
    pending:   { label: 'status.lessor.pending', cls: 'amber' },
    rejected:  { label: 'status.lessor.rejected', cls: 'rose' },
    suspended: { label: 'status.lessor.suspended', cls: 'gray' },
  };
  const DOCUMENT_STATUS = {
    pending:  { label: 'status.document.pending', cls: 'amber' },
    approved: { label: 'status.document.approved', cls: 'green' },
    rejected: { label: 'status.document.rejected', cls: 'rose' },
  };
  const KYC_STATUS = {
    not_submitted: { label: 'status.kyc.not_submitted', cls: 'gray' },
    pending:       { label: 'status.kyc.pending', cls: 'amber' },
    verified:      { label: 'status.kyc.verified', cls: 'green' },
    rejected:      { label: 'status.kyc.rejected', cls: 'rose' },
    expired:       { label: 'status.kyc.expired', cls: 'rose' },
  };

  window.KD = {
    fmtDA, fmtNum, WILAYAS, avColor, initials,
    BOOKING_STATUS, PAYMENT_STATUS, VEHICLE_STATUS, LESSOR_STATUS, DOCUMENT_STATUS, KYC_STATUS,
  };
})();
