import i18n from 'i18next'
import { initReactI18next } from 'react-i18next'
import { NativeModules, Platform } from 'react-native'
import { storage } from './storage'

// 导入语言资源
import enUS from '../locales/en-US.json'
import zhCN from '../locales/zh-CN.json'

// 定义支持的语言
export const SUPPORTED_LANGUAGES = {
    'zh-CN': '简体中文',
    'en-US': 'English',
} as const

export type SupportedLanguage = keyof typeof SUPPORTED_LANGUAGES

// 获取系统语言（Android 和 iOS 兼容）
const getSystemLanguage = (): string => {
    try {
        let locale: string | undefined

        if (Platform.OS === 'ios') {
            // iOS: 从 SettingsManager 获取
            const settings = NativeModules.SettingsManager?.settings
            locale = settings?.AppleLocale || settings?.AppleLanguages?.[0]
        } else if (Platform.OS === 'android') {
            // Android: 从 I18nManager 获取
            locale = NativeModules.I18nManager?.localeIdentifier
        }

        if (locale) {
            // 处理语言代码格式，例如 'zh_CN' -> 'zh-CN', 'en_US' -> 'en-US'
            const normalized = locale.replace('_', '-').toLowerCase()
            if (normalized.startsWith('zh')) {
                return 'zh-CN'
            } else if (normalized.startsWith('en')) {
                return 'en-US'
            }
        }
    } catch (error) {
        // 静默处理错误，使用默认语言
        console.warn('Error getting system language:', error)
    }
    return 'zh-CN' // 默认返回中文
}

// AsyncStorage 语言检测器（兼容 Android 和 iOS）
const languageDetector = {
    type: 'languageDetector' as const,
    async: true,
    detect: async (callback: (lng: string) => void) => {
        try {
            // 1. 优先使用用户保存的语言设置
            const savedLanguage = await storage.getItem('app_language')
            if (savedLanguage) {
                // 兼容旧的语言代码格式
                if (savedLanguage === 'zh' || savedLanguage === 'zh-CN') {
                    callback('zh-CN')
                    return
                } else if (savedLanguage === 'en' || savedLanguage === 'en-US') {
                    callback('en-US')
                    return
                }
            }

            // 2. 如果没有保存的语言，尝试使用系统语言
            const systemLang = getSystemLanguage()
            callback(systemLang)
        } catch (error) {
            console.error('Error detecting language:', error)
            // 3. 如果出错，使用默认语言
            callback('zh-CN')
        }
    },
    init: () => { },
    cacheUserLanguage: async (lng: string) => {
        try {
            // AsyncStorage 在 Android 和 iOS 上都正常工作
            await storage.setItem('app_language', lng)
        } catch (error) {
            console.error('Error saving language:', error)
        }
    },
}

// i18n配置
i18n.use(languageDetector)
    .use(initReactI18next)
    .init({
        // 语言资源
        resources: {
            'zh-CN': {
                translation: zhCN,
            },
            'en-US': {
                translation: enUS,
            },
        },

        // 默认语言
        fallbackLng: 'zh-CN',

        // 调试模式（开发环境开启）
        debug: false,

        // 兼容性配置：使用 v3 格式处理复数，避免 Android 端 Intl.PluralRules 不支持的问题
        compatibilityJSON: 'v3',

        // 插值配置
        interpolation: {
            escapeValue: false, // React已经处理了XSS防护
        },

        // 命名空间配置
        defaultNS: 'translation',
        ns: ['translation'],

        // 键值分隔符
        keySeparator: '.',
        nsSeparator: ':',
    })

export default i18n

