class Ecs::ImportStudentService < ApplicationService
  Error = Class.new(StandardError)

  attr_reader :ec_year, :params

  def initialize(ec_year, params)
    @ec_year = ec_year
    @params  = params
  end

  def call
    raise Error, '文件不存在' if params[:file].blank? || !params[:file].is_a?(ActionDispatch::Http::UploadedFile)

    excel = Ecs::ImportStudentExcel.new(params[:file].path)

    success_count = 0
    EcYearStudent.bulk_insert(:ec_year_id, :student_id, :name, :created_at, :updated_at) do |worker|
      excel.read_each do |student_id, name|
        success_count += 1

        student = ec_year.ec_year_students.find_by(student_id: student_id)
        if student.present?
          student.update!(name: name)
          next
        end

        worker.add(ec_year_id: ec_year.id, student_id: student_id, name: name)
      end
    end

    success_count
  rescue BaseImportExcel::Error => ex
    raise Error, ex.message
  end
end