/**
 * Défilement de la page commandé par le code : barre de défilement du site,
 * bouton de retour en haut.
 *
 * Tout passe par Lenis quand il est actif (écrans avec souris) : sans cela, le
 * défilement adouci ramènerait la page à sa position précédente.
 */
export function usePageScroll() {
  const { lenis } = useSmoothScroll()

  /** Position maximale de défilement, en pixels. */
  function limit(): number {
    return Math.max(document.documentElement.scrollHeight - window.innerHeight, 0)
  }

  /** Place la page à une position, sans transition : suit un glissement à la souris. */
  function jumpTo(top: number) {
    const target = Math.min(Math.max(top, 0), limit())
    if (lenis.value) lenis.value.scrollTo(target, { immediate: true, force: true })
    else window.scrollTo({ top: target, behavior: 'instant' })
  }

  /** Amène la page à une position en douceur (immédiatement en mouvement réduit). */
  function glideTo(top: number) {
    const target = Math.min(Math.max(top, 0), limit())
    if (lenis.value) {
      lenis.value.scrollTo(target, { duration: 1.1 })
      return
    }
    const reduce = window.matchMedia(MEDIA.reduce).matches
    window.scrollTo({ top: target, behavior: reduce ? 'instant' : 'smooth' })
  }

  return { limit, jumpTo, glideTo }
}
