// // LanguageSettingsViewModel.swift // SodaLive // // Created by Junie (AI) on 2025/12/16. // import Foundation final class LanguageSettingsViewModel: ObservableObject { // 저장된(현재 적용된) 언어 @Published var selected: LanguageOption = .system // 사용자가 화면에서 선택 중인 언어(적용 버튼 누르기 전 임시 상태) @Published var pending: LanguageOption = .system private let service: LanguageService init(service: LanguageService = LanguageContainer.service) { self.service = service } func onAppear() { Task { await loadCurrent() } } private func loadCurrent() async { let locale = await service.currentLocale() let option = map(locale: locale) await MainActor.run { self.selected = option self.pending = option } } func select(_ option: LanguageOption) { // 즉시 저장/적용하지 않고, 사용자가 '적용' 버튼을 누를 때까지 대기 self.pending = option } /// 선택한 언어를 저장/적용하고, 앱을 소프트 재시작하여 즉시 반영 func applyAndRestart() async { let toApply = pending await service.applyLanguage(toApply) await MainActor.run { self.selected = toApply // 앱 소프트 재시작(스플래시 -> 메인) AppState.shared.softRestart() } } private func map(locale: Locale) -> LanguageOption { let id = locale.identifier if id.hasPrefix("ko") { return .ko } if id.hasPrefix("ja") { return .ja } if id.hasPrefix("en") { return .en } return .system } }