import { useCallback, useState } from "react"

interface UseDisclosureOptions {
  defaultOpen?: boolean
}

interface UseDisclosureReturn {
  isOpen: boolean
  open: () => void
  close: () => void
  toggle: () => void
  setOpen: (open: boolean) => void
}

export function useDisclosure(options: UseDisclosureOptions = {}): UseDisclosureReturn {
  const [isOpen, setIsOpen] = useState<boolean>(!!options.defaultOpen)

  const open = useCallback(() => setIsOpen(true), [])
  const close = useCallback(() => setIsOpen(false), [])
  const toggle = useCallback(() => setIsOpen(prev => !prev), [])
  const setOpen = useCallback((open: boolean) => setIsOpen(open), [])

  return { isOpen, open, close, toggle, setOpen }
}
