import type { GameDataValue } from '#layers/types/api/gameData'
import { DEFAULT_COVERAGES } from '@/i18n.config'

/**
 * gameData.lang_codes를 기반으로 동적으로 언어 제외 설정을 생성하는 컴포저블
 */
export const useDynamicI18nRoutes = () => {
  const gameDataStore = useGameDataStore()
  
  /**
   * 현재 gameData의 lang_codes를 기반으로 허용된 언어 목록을 반환
   */
  const getAllowedLangCodes = (): string[] => {
    const gameData = gameDataStore.gameData
    return gameData?.lang_codes || []
  }
  
  /**
   * 특정 언어가 허용되는지 확인
   */
  const isLangAllowed = (langCode: string): boolean => {
    const allowedLangCodes = getAllowedLangCodes()
    return allowedLangCodes.length === 0 || allowedLangCodes.includes(langCode)
  }
  
  /**
   * defineI18nRoute에서 사용할 수 있는 언어 제외 설정을 생성
   * @param pagePath - 페이지 경로 (선택사항)
   * @returns 언어 제외 설정 객체
   */
  const getI18nRouteConfig = (pagePath?: string) => {
    const allowedLangCodes = getAllowedLangCodes()
    
    // 허용된 언어가 없으면 모든 언어 허용
    if (allowedLangCodes.length === 0) {
      return undefined
    }
    
    // 허용된 언어만 포함하는 설정 반환
    return {
      locales: allowedLangCodes
    }
  }
  
  /**
   * 특정 언어를 제외하는 설정을 생성
   * @param excludedLangCodes - 제외할 언어 코드 배열
   * @returns 언어 제외 설정 객체
   */
  const getExcludedLangConfig = (excludedLangCodes: string[]) => {
    const allowedLangCodes = getAllowedLangCodes()
    
    // 허용된 언어에서 제외할 언어를 제거
    const finalAllowedCodes = allowedLangCodes.length > 0 
      ? allowedLangCodes.filter(code => !excludedLangCodes.includes(code))
      : ['en', 'ja', 'ko', 'zh-tw', 'fr', 'de', 'es', 'pt', 'th', 'zh-cn'].filter(code => !excludedLangCodes.includes(code))
    
    return {
      locales: finalAllowedCodes
    }
  }
  
  return {
    getAllowedLangCodes,
    isLangAllowed,
    getI18nRouteConfig,
    getExcludedLangConfig
  }
}
