class Ecs::ImportAchievementExcel < BaseImportExcel
  def average_score_template?
    type == :average_score
  end

  def detail_score_template?
    type == :detail_score
  end

  def read_each(&block)
    average_score_template? ? read_average_score(&block) : read_detail_score(&block)
  end

  private

  def read_average_score(&block)
    block.call(sheet.row(3))
  end

  def read_detail_score(&block)
    3.upto(sheet.last_row) do |index|
      data = sheet.row(index)
      next if data.all?(:blank?)

      block.call(data)
    end
  end

  def type
    @_type ||= sheet.cell(1, 1)&.strip == '学号' && sheet.cell(1, 2)&.strip == '姓名' ? :detail_score : :average_score
  end

  def check_sheet_valid!
    raise_import_error('请按照模板格式导入') if sheet.last_row.nil? || sheet.last_row < 3
    raise_import_error('平均成绩只能有一行数据') if average_score_template? && sheet.last_row > 3
  end
end