class OneRoster::Courses::ClassesController < OneRoster::Controller
  include OneRoster::ClassroomScoped

  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(classrooms.map { |c| classroom_props(c) })
    render_success :ok, json: { classes: data }
  end

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

    def course
      @course ||= current_school.courses.find_by(id: course_id)
    end

    def classrooms
      return [] unless course.archived == false

      course.classrooms
        .includes(:room, :class_subjects, :course, :periods)
        .by_type([:day_long, :period_long, :general])
        .to_a
    end

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