class Admin::Legacy::HumanResources::PropertyEntryController <
  Admin::Legacy::HumanResources::Controller
  def index
    render_success :ok, json: employees.by_ids(params[:ids]).ordered.map { |e| props(e) }
  end

  def batch_update
    ids = params[:params].map { |i| i[:id] }
    data = employees.where(id: ids)
    data.each do |employee|
      param = params[:params].find { |i| i[:id] == employee.id }
      employee.assign_attributes(employee_params(param))
    end

    if transactional_save(data)
      render_success :ok, message: "#{data.count} employees updated."
    else
      render_error :unprocessable_entity, errors: multi_errors(data)
    end
  end

  private
    def employees
      current_school.employees.includes(:state_id, :school_number, :categories)
    end

    def employee_params(param)
      param.permit(
        :gender,
        :date_of_birth,
        :service_years,
        state_id_attributes: [:id, :number, :_destroy],
        school_number_attributes: [:id, :number, :_destroy],
        category_ids: []
      )
    end

    def props(employee)
      {
        id: employee.id,
        full_name: employee.full_name(:reverse),
        date_of_birth: employee.date_of_birth,
        gender: employee.gender,
        service_years: employee.service_years,
        state_number: employee.state_id&.number,
        state_id: employee.state_id&.id,
        school_id: employee.school_number&.id,
        school_number: employee.school_number&.number,
        category_ids: employee.category_ids
      }
    end
end
