import SwiftUI
@preconcurrency import Translation

struct SpeechView: View {
   @State private var transData = TranscriberData.shared
   @State private var isRecording: Bool = false

   @State private var translation: String = ""
   @State private var configuration: TranslationSession.Configuration? = nil

   var body: some View {
      VStack {
         ScrollView {
            Text(transData.partialText)
               .padding()
            Spacer()
         }
         .frame(height: 200)

         ScrollView {
            Text(translation)
               .padding()
            Spacer()
         }
         .frame(minWidth: 0, maxWidth: .infinity)
         .background(Color(.secondarySystemBackground))
      }
      .padding()
      .toolbar {
         ToolbarItem {
            Button(action: {
               if isRecording {
                  Task {
                     await transData.stopRecording()
                  }
               } else {
                  Task {
                     await transData.startRecording()
                  }
               }
               isRecording.toggle()
            }, label: {
               Image(systemName: isRecording ? "stop.fill" : "microphone.square")
            })
         }
      }
      .onChange(of: transData.finalText) { old, new in
         if configuration != nil {
            configuration?.invalidate()
         } else {
            let sourceLanguage = Locale.current.language
            let targetLanguage = Locale.Language(identifier: "es")
            configuration = TranslationSession.Configuration(source: sourceLanguage, target: targetLanguage)
         }
      }
      .translationTask(configuration) { session in
         do {
            let text = String(transData.finalText.characters)
            if !text.isEmpty {
               let response = try await session.translate(text)
               translation = response.targetText
            }
         } catch {
            print("Error translating the text: \(error)")
         }
      }
   }
}