"use client"

import { createContext, useContext } from "react"
import { useInView, type IntersectionOptions } from "react-intersection-observer"

/**
 * Vrai lorsque le composant est rendu à l'intérieur d'un panneau d'onglets.
 *
 * Les panneaux inactifs sont en display:none (attribut `hidden`) : un
 * IntersectionObserver ne s'y déclenche jamais, et le contenu resterait figé à
 * opacity 0 même une fois affiché. Dans ce contexte on considère le contenu
 * comme « déjà révélé », chaque enfant joue son animation une seule fois, au
 * chargement de la page, pendant qu'il est encore caché. Au changement
 * d'onglet il ne reste donc qu'UNE animation : celle du panneau lui-même.
 *
 * Défaut `false` : aucun changement de comportement sur l'accueil, /entreprise,
 * /mediatheque et toutes les autres pages qui utilisent ces composants.
 */
export const ContexteRevelationPanneau = createContext(false)

/**
 * Remplaçant direct de `useInView` pour les composants susceptibles d'être
 * rendus dans un panneau d'onglets. Même signature, même valeur de retour.
 */
export function useRevelationInView(
  options?: IntersectionOptions,
): [(node?: Element | null) => void, boolean] {
  const dansPanneau = useContext(ContexteRevelationPanneau)
  const [ref, inView] = useInView(options)
  return [ref, dansPanneau || inView]
}
