import { useEffect, useState } from "react"

const useFetch = (url, params, initialData) => {
    const [data, setData] = useState(initialData)
    const [loading, setLoading] = useState(true)
    const [error, setError] = useState("")

    useEffect(() => {
        fetch(url, params)
            .then(res => {
                if (!res.ok) {
                    switch (res.status) {
                        case 401: {
                            throw new Error("Ошибка авторизации")
                        }
                        case 404: {
                            new Error("Объект не найден")
                        }
                        break
                        default: {
                            throw new Error("Ошибка ответа от сервера")
                        }
                    }
                }

                return res.json()
            })
            .then(data => {
                setData(data)
                setLoading(false)
            })
            .catch(err => {
                setError("Ошибка сети")
                setLoading(false)
            })
    }, [url, params])

    return { data, loading, error }
}

export default useFetch
