class OneRoster::CoursesController < OneRoster::Controller
  include OneRoster::SchoolScoped

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

  def index
    render_success :ok, json: { courses: bind_and_parse(courses.map { |e| course_props(e) }) }
  end

  def show
    render_success :ok, json: { course: course_props(course) }
  end

  private
    def courses
      @courses ||= current_school.courses
    end

    def course
      @course ||= current_school.send(model).find_by(id: id)
    end

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

    def course_props(course)
      {}.tap do |props|
        props[:dateLastModified] = course.updated_at.iso8601
        props[:sourcedId] = encode_source_id(:course, course.id)
        props[:status] = course.archived ? :tobedeleted : :active
        props[:title] = course.name
        props[:courseCode] = course.code if course.code?
        props[:org] = school_references
      end
    end

    def endpoint_props
      [
        :dateLastModified,
        :sourcedId,
        :status,
        :title,
        :courseCode,
        :org
      ]
    end
end
