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

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

  def index
    render_success :ok, json: { classes: bind_and_parse(classrooms.map { |c| classroom_props(c) }) }
  end

  private
    def teacher?(id)
      current_school.class_teachers.by_teachers(id)
    end

    def classrooms
      @classrooms ||= current_school.classrooms
        .by_student(@student_id)
        .by_user(@user_id)
        .by_type([:day_long, :period_long, :general])
        .joins(:course)
    end

    def user_role
      decoded = decode_source_id(params[:user_id])
      id = decoded['id'].to_i
      model = decoded['model']

      if model == 'student'
        @student_id = id
      elsif teacher?(id)
        @user_id = id
      end
    end

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