import { boot } from 'quasar/wrappers'

// Comportement GLOBAL des bulles d'aide (q-tooltip), app-wide :
//  1) Le CLIC a PRÉSÉANCE — un pointerdown masque la bulle immédiatement et tant qu'on reste sur le même
//     élément ; elle ne réapparaît qu'en survolant un AUTRE élément.
//  2) JAMAIS deux bulles à la fois — sur des éléments imbriqués (ex. cellule de planif + bloc job, ou
//     timeline + job), on ne garde que la PLUS RÉCENTE (la plus interne). Anti-empilement.
//
// Quasar monte chaque tooltip comme élément `.q-tooltip` (téléporté dans <body>). On agit au niveau DOM
// (display) sans toucher chaque q-tooltip individuellement → fix unique pour toute l'app. Entièrement
// défensif : si l'hypothèse DOM change, le pire cas est un no-op (bulles inchangées), jamais une casse.
export default boot(() => {
  if (typeof document === 'undefined' || !document.body) return

  let suppressed = false   // vrai juste après un clic → on masque tout jusqu'au prochain survol d'un autre élément
  let clicked = null

  const apply = () => {
    const tips = Array.from(document.querySelectorAll('.q-tooltip'))
    if (!tips.length) return
    if (suppressed) { for (const t of tips) t.style.display = 'none'; return }
    // ne garder QUE la plus récente (dernière dans le DOM = la plus interne / dernière survolée)
    tips.forEach((t, i) => { t.style.display = i === tips.length - 1 ? '' : 'none' })
  }

  // 1) clic = masquer la bulle (préséance)
  document.addEventListener('pointerdown', (e) => { suppressed = true; clicked = e.target; apply() }, true)
  // … jusqu'à ce qu'on survole un élément DIFFÉRENT
  document.addEventListener('pointerover', (e) => {
    if (suppressed && clicked && e.target !== clicked && !(clicked.contains && clicked.contains(e.target))) {
      suppressed = false; clicked = null; apply()
    }
  }, true)

  // 2) anti-empilement : à chaque ajout/retrait de bulle (téléport dans body), garder une seule bulle
  try { new MutationObserver(apply).observe(document.body, { childList: true }) } catch (e) { /* no-op */ }
})
