"use client"

import type React from "react"
import { createContext, useContext, useState, useEffect } from "react"
import i18n from "@/lib/i18n"

type LanguageContextType = {
  language: string
  changeLanguage: (lang: string) => void
  isReady: boolean
}

const LanguageContext = createContext<LanguageContextType>({
  language: "en",
  changeLanguage: () => {},
  isReady: false,
})

export const useLanguage = () => useContext(LanguageContext)

export const LanguageProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
  const [language, setLanguage] = useState("en")
  const [isReady, setIsReady] = useState(false)

  useEffect(() => {
    const initLanguage = async () => {
      try {
        // Wait for i18n to be ready
        if (i18n.isInitialized) {
          const currentLang = i18n.language || localStorage.getItem("i18nextLng") || "en"
          setLanguage(currentLang)
          setIsReady(true)
        } else {
          // Wait for initialization
          const checkReady = setInterval(() => {
            if (i18n.isInitialized) {
              const currentLang = i18n.language || localStorage.getItem("i18nextLng") || "en"
              setLanguage(currentLang)
              setIsReady(true)
              clearInterval(checkReady)
            }
          }, 100)

          // Cleanup after 5 seconds
          setTimeout(() => {
            clearInterval(checkReady)
            setIsReady(true)
          }, 5000)
        }
      } catch (error) {
        console.error("Language initialization error:", error)
        setIsReady(true)
      }
    }

    initLanguage()
  }, [])

  const changeLanguage = async (lang: string) => {
    try {
      await i18n.changeLanguage(lang)
      setLanguage(lang)
      localStorage.setItem("i18nextLng", lang)
    } catch (error) {
      console.error("Failed to change language:", error)
    }
  }

  return <LanguageContext.Provider value={{ language, changeLanguage, isReady }}>{children}</LanguageContext.Provider>
}
