'use client'

// Body-Scroll-Lock für Drawer/Sheets (KAR-708): hinter einem offenen Overlay
// darf der Seiteninhalt nicht weiterscrollen (iOS scrollt sonst die Page
// unter dem Sheet). `lockScroll` ist bewusst DOM-frei (Node-Test-Umgebung);
// der Hook schließt es an document.body an.

import { useEffect } from 'react'

export interface OverflowStyle {
  overflow: string
}

/**
 * Setzt `overflow: hidden` auf dem übergebenen Style-Target und gibt eine
 * Restore-Funktion zurück, die den vorherigen Wert wiederherstellt.
 * Verschachtelte Locks müssen in umgekehrter Reihenfolge restored werden.
 */
export function lockScroll(style: OverflowStyle): () => void {
  const prev = style.overflow
  style.overflow = 'hidden'
  return () => {
    style.overflow = prev
  }
}

/** Sperrt das Body-Scrolling solange `active` (offener Drawer/Sheet) — KAR-708. */
export function useBodyScrollLock(active: boolean) {
  useEffect(() => {
    if (!active) return
    return lockScroll(document.body.style)
  }, [active])
}
