module OneRoster::EnrollmentScoped
  extend ActiveSupport::Concern

  include OneRoster::ClassroomScoped
  include OneRoster::UserScoped
  include OneRoster::SchoolScoped

  private
    def enrollment_props(enrollment, references=false)
      if enrollment.class.name == 'ClassTeacher'
        title = :teacher
        area = :class_teachers
      else
        title = :student
        area = :class_students
      end

      {}.tap do |props|
        props[:sourcedId] = encode_source_id(area, enrollment.id)
        props[:class] = classroom_references(enrollment.classroom)
        props[:school] = school_references
        props[:role] = title
        props[:status] = :active
        props[:dateLastModified] = enrollment.updated_at.iso8601

        if title.to_sym == :teacher
          props[:user] = user_references(enrollment.employee)
          props[:primary] = enrollment.classroom&.primary_teacher_id == enrollment.user_id
        elsif enrollment.student.user
          props[:user] = user_references(enrollment.student)
        end
      end
    end

    def endpoint_props
      [
        :sourcedId,
        :class,
        :school,
        :role,
        :status,
        :dateLastModified,
        :user,
        :primary
      ]
    end
end
