# frozen_string_literal: true

class RepositoryZipExportJob < ZipExportJob
  private

  # Override
  def fill_content(dir, params)
    repository = RepositoryBase.find(params[:repository_id])
    # Fetch rows in the same order as in the currently viewed datatable
    if params[:my_module_id]
      rows = if repository.is_a?(RepositorySnapshot)
               repository.repository_rows
             else
               repository.repository_rows
                         .joins(:my_module_repository_rows)
                         .where(my_module_repository_rows: { my_module_id: params[:my_module_id] })
             end
      if repository.has_stock_management?
        rows = rows.left_joins(my_module_repository_rows: :repository_stock_unit_item)
                   .select(
                     'repository_rows.*',
                     'my_module_repository_rows.stock_consumption'
                   )
      end
      service = RepositoryExportService.new(@file_type, rows, params[:header_ids].map(&:to_i),
                                            repository, in_module: true)
    else
      ordered_row_ids = params[:row_ids].map(&:to_i)
      rows = repository.repository_rows.where(id: ordered_row_ids)
      service = RepositoryExportService.new(@file_type, rows, params[:header_ids].map(&:to_i),
                                            repository, in_module: false, ordered_row_ids: ordered_row_ids)
    end
    exported_data = service.export!
    File.binwrite("#{dir}/export.#{@file_type}", exported_data)
  end

  def failed_notification_title
    I18n.t('activejob.failure_notifiable_job.item_notification_title',
           item: I18n.t('activejob.failure_notifiable_job.items.repository_item'))
  end
end
