import { useState, useEffect, useCallback } from 'react'
import { data } from 'react-router'

type RequestFunction<T> = () => Promise<T>

interface UseApiResult<T> {
  data: T | null
  loading: boolean
  error: Error | null
  refresh: () => void
}

export function useApi<T>(
    requestFn: RequestFunction<T>,
    immediate = true
  ): UseApiResult<T> {
    const [data, setData] = useState<T | null>(null)
    const [loading, setLoading] = useState(false)
    const [error, setError] = useState<Error | null>(null)
  
    const execute = useCallback(async () => {
      try {
        setLoading(true)
        const result = await requestFn()
        setData(result)
        setError(null)
        return result  // 返回请求结果
      } catch (err) {
        setError(err as Error)
        throw err
      } finally {
        setLoading(false)
      }
    }, [requestFn])
  
    useEffect(() => {
      if (immediate) {
        execute()
      }
    }, [execute, immediate])
  
    return { data, loading, error, refresh: execute }
  }