import SwiftUI
import Observation
@preconcurrency import Translation

@Observable class ApplicationData {
   var configuration: TranslationSession.Configuration? = nil
   var selectedSource: Int = 0
   var selectedTarget: Int = 1
   var listLanguages: [Locale.Language] = []

   static let shared: ApplicationData = ApplicationData()
   private init() {
      listLanguages = [Locale.Language(identifier: "en"), Locale.Language(identifier: "es")]
   }
   func updateConfiguration() {
      if configuration != nil {
         if configuration?.source != listLanguages[selectedSource] || configuration?.target != listLanguages[selectedTarget] {
            configuration = TranslationSession.Configuration(source: listLanguages[selectedSource], target: listLanguages[selectedTarget])
         } else {
            configuration?.invalidate()
         }
      } else {
         configuration = TranslationSession.Configuration(source: listLanguages[selectedSource], target: listLanguages[selectedTarget])
      }
   }
   func getLanguageName(index: Int) -> String {
      var name = "Undefined"
      if let code = listLanguages[index].languageCode?.identifier {
         if let languageName = Locale.current.localizedString(forLanguageCode: code) {
            name = languageName
         }
      }
      return name
   }
   func changeSource(old: Int, new: Int) {
      if selectedSource == selectedTarget {
         selectedSource = old
      }
   }
   func changeTarget(old: Int, new: Int) {
      if selectedTarget == selectedSource {
         selectedTarget = old
      }
   }
}