import Foundation enum RecognitionLanguage: String, CaseIterable { case chineseSimplified = "zh-CN" case english = "en-US" case chineseTraditional = "zh-TW" case japanese = "ja-JP" case korean = "ko-KR" var displayName: String { switch self { case .chineseSimplified: return "简体中文" case .english: return "English" case .chineseTraditional: return "繁體中文" case .japanese: return "日本語" case .korean: return "한국어" } } } struct Config { static var shared = Config() private let defaults = UserDefaults.standard private enum Keys { static let language = "recognition_language" static let llmEnabled = "llm_enabled" static let llmBaseURL = "llm_base_url" static let llmAPIKey = "llm_api_key" static let llmModel = "llm_model" } var language: RecognitionLanguage { get { guard let raw = defaults.string(forKey: Keys.language), let lang = RecognitionLanguage(rawValue: raw) else { return .chineseSimplified } return lang } set { defaults.set(newValue.rawValue, forKey: Keys.language) } } var llmEnabled: Bool { get { defaults.bool(forKey: Keys.llmEnabled) } set { defaults.set(newValue, forKey: Keys.llmEnabled) } } var llmBaseURL: String { get { defaults.string(forKey: Keys.llmBaseURL) ?? "" } set { defaults.set(newValue, forKey: Keys.llmBaseURL) } } var llmAPIKey: String { get { defaults.string(forKey: Keys.llmAPIKey) ?? "" } set { defaults.set(newValue, forKey: Keys.llmAPIKey) } } var llmModel: String { get { defaults.string(forKey: Keys.llmModel) ?? "" } set { defaults.set(newValue, forKey: Keys.llmModel) } } var isLLMConfigured: Bool { !llmBaseURL.isEmpty && !llmAPIKey.isEmpty && !llmModel.isEmpty } }