class BulkUploadErrorSummaryTableComponent < ViewComponent::Base
  DISPLAY_THRESHOLD = 16

  attr_reader :bulk_upload

  delegate :question_for_field, to: :row_parser_class

  def initialize(bulk_upload:)
    @bulk_upload = bulk_upload

    super
  end

  def sorted_errors
    @sorted_errors ||= setup_errors.presence || bulk_upload
      .bulk_upload_errors
      .group(:col, :field, :error)
      .having("count(*) > ?", display_threshold)
      .count
      .sort_by { |el| el[0][0].rjust(3, "0") }
  end

  def errors?
    sorted_errors.present?
  end

private

  def setup_errors
    @setup_errors ||= bulk_upload
      .bulk_upload_errors
      .where(category: "setup")
      .group(:col, :field, :error)
      .having("count(*) > ?", display_threshold)
      .count
      .sort_by { |el| el[0][0].rjust(3, "0") }
  end

  def display_threshold
    DISPLAY_THRESHOLD
  end

  def row_parser_class
    bulk_upload.prefix_namespace::RowParser
  end
end