import SwiftUI
import Vision
@preconcurrency import Translation

struct ContentView: View {
   @State private var translation: String = "Translating..."
   @State private var textToTranslate: String = ""
   @State private var configuration: TranslationSession.Configuration? = nil

   var body: some View {
      VStack {
         Image(uiImage: UIImage(named: "frenchsign")!)
            .resizable()
            .scaledToFit()
            .padding()
         Text(translation)
         Spacer()
      }
      .padding()
      .task {
         let imageURL = Bundle.main.url(forResource: "frenchsign", withExtension: "png")
         if let imageURL = imageURL {
            do {
               var request = RecognizeTextRequest()
               request.recognitionLevel = .accurate
               let result = try await request.perform(on: imageURL)

               var text: String = ""
               for observation in result {
                  text += "\(observation.transcript) "
               }
               textToTranslate = text
               
               // Translate the text
               let userLanguage = Locale.current.language
               if configuration != nil {
                  configuration?.invalidate()
               } else {
                  configuration = TranslationSession.Configuration(source: nil, target: userLanguage)
               }
            } catch {
               print("Error performing the request: \(error)")
            }
         }
      }
      .translationTask(configuration) { session in
         do {
            let response = try await session.translate(textToTranslate)
            translation = response.targetText
         } catch {
            print("Error translating the text: \(error)")
         }
      }
   }
}