import { createContext, useContext, useState } from 'react'
import type { PropsWithChildren } from 'react'

type ConextType = {
  isLoading: boolean
  loadingStart?(): void
  loadingDone?(): void
}

const defaultValue = {
  isLoading: true,
}

const LoadingContext = createContext<ConextType>(defaultValue)

export function useLoadingContext() {
  return useContext(LoadingContext)
}

export function LoadingProvider({ children }: PropsWithChildren) {
  const [isLoading, setIsLoading] = useState(true)

  function loadingStart() {
    setIsLoading(true)
  }

  function loadingDone() {
    setIsLoading(false)
  }

  const value = { isLoading, loadingStart, loadingDone }

  return <LoadingContext.Provider value={value}>{children}</LoadingContext.Provider>
}
