import { useCallback, useRef, useState } from 'react'
import { useAuthContext } from './AuthProvider.js'

export function useSignOut() {
  const { client, setUser } = useAuthContext('useSignOut')
  const [pending, setPending] = useState(false)
  const [error, setError] = useState<Error | null>(null)
  const clientRef = useRef(client)
  clientRef.current = client

  const signOut = useCallback(async (): Promise<void> => {
    setPending(true)
    setError(null)
    try {
      await clientRef.current.signOut()
      setUser(null)
      setPending(false)
    } catch (e: unknown) {
      const err = e instanceof Error ? e : new Error(String(e))
      setError(err)
      setPending(false)
      throw err
    }
  }, [setUser])

  return { signOut, pending, error }
}
