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

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

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

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

  return { request, reset, pending, error }
}
