class OneRoster::CategoriesController < OneRoster::Controller
  before_action :authorize_gradebook_scope
  after_action :set_total_count_header, only: :index

  def index
    data = bind_and_parse(categories.map { |c| category_props(c) })
    render_success :ok, json: { categories: data }
  end

  def show
    render_success :ok, json: { categories: category_props(category) }
  end

  private
    def categories
      current_school.class_grade_categories
        .includes(:classroom)
        .joins(classroom: :course)
        .merge(Classroom.by_type([:day_long, :period_long, :general]))
    end

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

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

    def category_props(category)
      {
        sourceId: encode_source_id(:class_grade_categories, category.id),
        status: :active,
        dateLastModified: category.updated_at.iso8601,
        title: category.name,
        metadata: { classId: encode_source_id(:classroom, category.class_id) }
      }
    end
end
