class OneRoster::Classes::EnrollmentsController < OneRoster::Controller
  include OneRoster::ClassroomScoped
  include OneRoster::EnrollmentScoped
  include OneRoster::UserScoped

  before_action :authorize_roster_scope
  before_action :validate_school_id, only: :index
  after_action :set_total_count_header, only: :index

  def index
    data = bind_and_parse(enrollments.map { |e| enrollment_props(e, :references) })
    render_success :ok, json: { enrollments: data }
  end

  private
    def class_id
      decode_source_id(params[:class_id])['id'].to_i
    end

    def enrollments
      @enrollments ||= students + teachers
    end

    def students
      @students ||= current_school.class_students
        .includes(:classroom, student: :user)
        .by_classroom(class_id)
        .with_user
        .distinct
    end

    def teachers
      @teachers ||= current_school.class_teachers
        .includes(:classroom, :employee)
        .by_classroom(class_id)
        .distinct
    end

    def set_total_count_header
      response.set_header('X-Total-Count', enrollments.count.to_s)
    end
end
