import { useCallback, useMemo } from 'react'

/**
 * useWebShare – abstracts native Web Share API with a fallback callback.
 *
 * Usage:
 *   const { canNativeShare, share } = useWebShare({ onFallback })
 *   share({ title, text, url })
 *
 * If `navigator.share` is available the browser-native share sheet opens.
 * Otherwise `onFallback({ title, text, url })` is called (e.g. open a modal).
 */
export default function useWebShare({ onFallback } = {}) {
  const canNativeShare = useMemo(
    () => typeof navigator !== 'undefined' && typeof navigator.share === 'function',
    [],
  )

  const share = useCallback(
    async ({ title, text, url }) => {
      if (canNativeShare) {
        try {
          await navigator.share({ title, text, url })
          return { shared: true, native: true }
        } catch (err) {
          // User cancelled the native share — don't fall through to modal
          if (err?.name === 'AbortError') {
            return { shared: false, native: true }
          }
        }
      }

      // Fallback — open modal
      onFallback?.({ title, text, url })
      return { shared: false, native: false }
    },
    [canNativeShare, onFallback],
  )

  return { canNativeShare, share }
}
