class TSV
  def self.execute(data, filename, output_location, batch_id)
    output_file = File.new("#{output_location}/#{File.basename(filename, '.*')}_done.tsv", "w+")

    progressbar = ProgressBar.create(:title => "Writing TSV", :starting_at => 0, :total => data.count)

    output_file.puts ['Account ID (Required)', 'Contract ID (Required)', 'UPC (Optional)',
     'Amount (Required)', 'Currency (Required)', 'Activity year (Required)',
     'Activity month (Required)', 'Apply to Statement year (Required)',
     'Apply to Statement month (Required)', 'Adjustment Type (Required)',
     'Comment (Optional)', 'Distribution Type (Optional)', 'Valid? (Generated by Abacus)',
     'Error Reasons (Generated by Abacus)', 'Filename (Generated by Abacus)',
     'Abacus Batch ID (Generated by Abacus)', 'Abacus Item ID (Generated by Abacus)'].join("\t")

    data.reverse.each do | line |
      progressbar.increment

      reasons = line[:reasons].join(', ')
      invalid = line[:reasons].any? ? 'N' : 'Y'

      line =
       [line[:account_id],
        line[:contract_id],
        line[:upc],
        line[:amount],
        line[:currency],
        line[:activity_year],
        line[:activity_month],
        line[:apply_year],
        line[:apply_month],
        line[:adjustment_type],
        line[:comment],
        line[:distribution_type],
        invalid, reasons,
        filename, batch_id, line[:record_id]].join("\t")

      output_file.puts(line)
    end
  end
end


