import { useCallback, useEffect } from 'react'
import { useBlocker } from 'react-router-dom'

/**
 * Blockiert SPA-internes Routing bei ungesichertem Bearbeitungszustand (data router oder BrowserRouter ab RR 6.22).
 * Kombination mit einem Dialog (Speichern / Abbrechen / Verwerfen) und optionally useBeforeUnloadWhen.
 */
export function useUnsavedChangesBlocker(when) {
  const shouldBlock = useCallback(
    ({ currentLocation, nextLocation }) =>
      !!when &&
      (currentLocation.pathname !== nextLocation.pathname ||
        currentLocation.search !== nextLocation.search ||
        currentLocation.hash !== nextLocation.hash),
    [when],
  )
  return useBlocker(when ? shouldBlock : false)
}

/** Tab/Fenster schließen oder harten Reload — natives Browser-Verhalten mit generischem Warnhinweis. */
export function useBeforeUnloadWhen(when) {
  useEffect(() => {
    if (!when) return undefined
    const fn = (ev) => {
      ev.preventDefault()
      ev.returnValue = ''
    }
    window.addEventListener('beforeunload', fn)
    return () => window.removeEventListener('beforeunload', fn)
  }, [when])
}
