class GoogleTranslateJob < ApplicationJob
  queue_as :default

  def perform(respondent_id:, source_language_code:, target_language_code:)
    respondent = Respondent.find(respondent_id)
    respondent.upload_transcript_to_gcs
    data = GoogleCloudTranslateService.translate_document(
      document_path: respondent.uploaded_transcript_path,
      source_language_code:,
      target_language_code:
    )
    raw_bytes = data.document_translation.byte_stream_outputs.first
    path = "/tmp/translated_#{respondent.id}_#{respondent.name.parameterize(separator: '_')}.docx"
    File.open(path, "wb") { |f| f.write(raw_bytes) }

    if respondent.whisper_transcript
      respondent.whisper_transcript.destroy
    elsif respondent.docx_transcript
      respondent.docx_transcript.destroy
    end

    respondent.transcript = File.open(path)
    respondent.language = "en"
    respondent.manual_language = "en"
    respondent.save
    respondent.generate_docx_transcript!
  rescue StandardError => e
    Rails.logger.fatal("Error during Google Translate Job -> #{e.message}")
  end
end
