import { useState, useCallback } from 'react'
import { useTranslation } from 'react-i18next'

import {
  changeLanguage,
  resolveLanguage,
  supportedLanguages,
} from '@/services/i18n'

import { useVerge } from './use-verge'

export const useI18n = () => {
  const { i18n, t } = useTranslation()
  const { patchVerge } = useVerge()
  const [isLoading, setIsLoading] = useState(false)

  const switchLanguage = useCallback(
    async (language: string) => {
      const targetLanguage = resolveLanguage(language)

      if (!supportedLanguages.includes(targetLanguage)) {
        console.warn(`Unsupported language: ${language}`)
        return
      }

      if (i18n.language === targetLanguage) {
        return
      }

      setIsLoading(true)
      try {
        await changeLanguage(targetLanguage)

        if (patchVerge) {
          await patchVerge({ language: targetLanguage })
        }
      } catch (error) {
        console.error('Failed to change language:', error)
      } finally {
        setIsLoading(false)
      }
    },
    [i18n.language, patchVerge],
  )

  return {
    currentLanguage: i18n.language,
    supportedLanguages,
    switchLanguage,
    isLoading,
    t,
  }
}
