require 'rubygems'
require 'zip'

class Reporting::Job
  include Sidekiq::Worker

  def perform(school_id, user_id, params={})
    @school = School.find(school_id)
    Time.zone = @school.time_zone
    @user = @school.users.find_by(id: user_id)
    @params = params
    @filename = ''
    process
  end

  private
    def create_pdf
      @pdf = ::CombinePDF.new
    end

    def create_tmp_file
      @tmp_file = Tempfile.new
    end

    def save_pdf
      @pdf.save @tmp_file.path
    end

    def send_and_zip_csv_files(files)
      @tmp_file = Tempfile.new
      Zip::File.open(@tmp_file, create: true) do |zip_file|
        files.each do |name, file|
          tmp = Tempfile.new
          tmp.write("\uFEFF#{file}")
          tmp.rewind
          zip_file.add(name, tmp.path)
        end
      end

      save_to_user
      send_report
    end

    def save_to_user
      report = @user.reports.attach(io: File.open(@tmp_file.path), filename: @filename)
      return if report == true

      report.save
    end

    def send_report
      report = @user.reports.last

      params = {
        type: :report,
        id: report.id,
        filename: report.filename
      }

      ActionCable.server.broadcast("notifications_channel_#{@user.id}", params)
    end

    def timestamp
      Time.zone.now.strftime('%m-%d-%Y-%H%M%S')
    end
end
