class Admin::Legacy::Student::PropertyEntryController < Admin::Legacy::Student::Controller
  def index
    render_success :ok, json: students.by_id(params[:ids]).ordered.map { |s| props(s) }
  end

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

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

  private
    def students
      current_school.students.includes(
        :state_number,
        :school_number,
        :indiana_settlement_number,
        :user,
        :categories
      )
    end

    def student_params(param)
      param.permit(
        :gender,
        :date_of_birth,
        :graduated,
        :graduation_year,
        :graduation_month,
        :graduation_day,
        category_ids: [],
        student_requirement_attributes: [:id, :requirement_label_id, :_destroy],
        state_number_attributes: [:id, :number, :_destroy],
        school_number_attributes: [:id, :number, :_destroy],
        indiana_settlement_number_attributes: [:id, :number, :_destroy],
        user_attributes: [:id, :active]
      )
    end

    def props(student)
      {
        id: student.id,
        full_name: student.full_name(:reverse),
        date_of_birth: student.date_of_birth,
        gender: student.gender,
        graduated: student.graduated?,
        graduation_date: student.decorate.graduation_date,
        graduation_day: student.graduation_day,
        graduation_month: student.graduation_month,
        graduation_year: student.graduation_year,
        school_number: student.school_number&.number,
        school_id: student.school_number&.id,
        state_number: student.state_number&.number,
        state_id: student.state_number&.id,
        requirement_id: student.student_requirement&.id,
        requirement_label_id: student.student_requirement&.requirement_label_id,
        requirement_label: student.requirement_label&.name,
        indiana_settlement_number: student.indiana_settlement_number&.number,
        indiana_settlement_id: student.indiana_settlement_number&.id,
        user_attributes: {
          active: student&.user&.active,
          id: student&.user&.id
        },
        category_ids: student.category_ids
      }
    end
end
