/**
 * departments.js — Détection du département probable par MOTS-CLÉS (instantané, côté client).
 *
 * Sert au composer de ticket (et au SMS/courriel) : en tapant le sujet en langage naturel,
 * on fait ressortir le(s) département(s) le(s) plus probable(s) → chips cliquables, sans choisir dans une liste.
 * `category` = la catégorie du ticket (préfixe [Cat]) ; `queue` = l'équipe notifiée (files de l'Inbox).
 *
 * SOURCE UNIQUE aussi pour le pont RAISON → COMPÉTENCE(S) requise(s) :
 *   `skills` = compétences terrain que la demande exige ([] = traité à distance / au bureau → n'importe qui) ;
 *   `dur`    = durée par défaut du rendez-vous (h) proposée quand on choisit ce motif.
 * Le composant <AvailabilityByReason> lit ces champs pour FILTRER le dénominateur des bandes d'occupation
 * (« 70 h installation » au lieu de « 150 h tous techs »). Doit rester aligné sur lib/skill-resolver.js (hub).
 *
 * Éditer ici pour ajuster les mots-clés / compétences — une seule source.
 */
export const DEPARTMENTS = [
  { category: 'Support', queue: 'Supports', icon: 'wifi', color: 'primary', skills: ['support'], dur: 1,
    re: /\b(wi-?fi|internet|lent[e]?|ralenti|panne|coup[ée]+|connexion|connecter?|signal|modem|routeur|red[ée]marr|d[ée]connect|d[ée]branch|intermittent|latence|ping|ne marche|ne fonctionne|pas d['e]internet|hors service|bug)\b/i },
  { category: 'Facturation', queue: 'Facturations', icon: 'receipt_long', color: 'green-7', skills: [], dur: 1,
    re: /\b(factur|paiement|payer|pay[ée]|solde|rembours|pr[ée]l[èe]v|carte de cr[ée]dit|montant|frais|cr[ée]dit|impay[ée]|retard de paiement|re[çc]u|virement|interac|trop per[çc]u)\b/i },
  { category: 'Installation', queue: 'Technicien', icon: 'construction', color: 'orange-7', skills: ['installation'], dur: 2,
    re: /\b(installation|installer|rendez-?vous|rdv|branchement|brancher|raccord|technicien|d[ée]placement|visite)\b/i },
  { category: 'Réparation', queue: 'Technicien', icon: 'build', color: 'red-7', skills: ['réparation'], dur: 1.5,
    re: /\b(r[ée]par|d[ée]pann|bris|brisé|cass[ée]|d[ée]fectueu|remplacer|ne fonctionne plus|probl[èe]me technique|d[ée]sinstall)\b/i },
  { category: 'Télévision', queue: 'Technicien', icon: 'live_tv', color: 'purple-6', skills: ['tv'], dur: 1,
    re: /\b(t[ée]l[ée]vision|t[ée]l[ée]\b|\btv\b|iptv|cha[îi]ne|d[ée]codeur|illico|ministra|enregistreur|t[ée]l[ée]command)\b/i },
  { category: 'Téléphonie', queue: 'Technicien', icon: 'call', color: 'teal-7', skills: ['telephone'], dur: 1,
    re: /\b(t[ée]l[ée]phon|voip|tonalit[ée]|ligne t[ée]l|appel sortant|messagerie vocale|combin[ée]|sip)\b/i },
  { category: 'Commercial', queue: 'Service à la clientèle', icon: 'sell', color: 'blue-7', skills: [], dur: 1,
    re: /\b(forfait|abonnement|prix|soumission|nouveau client|d[ée]m[ée]nage|upgrade|am[ée]liorer|vitesse|offre|promotion|r[ée]siliation|r[ée]silier|annulation|annuler|fermer le compte)\b/i },
]

/**
 * skillsForDepartment(category) → tableau de compétences requises (miroir client de DEPARTMENT_SKILLS du hub).
 * '' / inconnu → [] (aucune compétence ⇒ dénominateur = tous les techs).
 */
export function skillsForDepartment (category) {
  const d = DEPARTMENTS.find(x => x.category === category)
  return d ? (d.skills || []) : []
}

/**
 * suggestDepartments(text) → départements probables, classés par nombre de mots-clés trouvés.
 * Renvoie [{ category, queue, icon, color, keyword, score }]. Le 1er = le plus probable.
 */
export function suggestDepartments (text) {
  const t = String(text || '')
  if (t.trim().length < 3) return []
  const hits = []
  for (const d of DEPARTMENTS) {
    const g = new RegExp(d.re.source, 'gi')
    const matches = t.match(g)
    if (matches && matches.length) hits.push({ category: d.category, queue: d.queue, icon: d.icon, color: d.color, keyword: matches[0].toLowerCase(), score: matches.length })
  }
  return hits.sort((a, b) => b.score - a.score)
}
