# 代码溯源 导出pdf
require 'open-uri'
require 'fileutils'
require 'zip'

class Trace::PdfReportService < Trace::ClientService
  
  attr_accessor :token, :task_id 

  def initialize(token, task_id)
    @token = token 
    @task_id = task_id
  end

  def call 
    content = open("#{domain}#{base_url}#{url}?task_id=#{task_id}", "Authorization" => token)
    if content.is_a?(Tempfile)
      check_file_path
      IO.copy_stream(content, "#{save_path}/report.zip")
      Zip::File.open("#{save_path}/report.zip") do |zip_file|
        zip_file.each do |f| 
          name = f.name.force_encoding('utf-8')
          next unless name == '/report.pdf'
          fpath = File.join(save_path, name)
          zip_file.extract(f, fpath) 
        end
      end
      return {code: 200, download_url: "/trace_task_results/#{task_id}/report.pdf"}
    else 
      return {code: 404}
    end
  end

  private 
  def check_file_path 
    FileUtils.mkdir_p save_path
  end

  def save_path 
    "public/trace_task_results/#{task_id}"
  end

  def url
    "/user/pdfreport".freeze
  end
end