class Admin::Legacy::Student::CategoryGroupsController < Admin::Legacy::Student::Controller
  def index
    render_success :ok, json: groups.includes(:categories).map { |g| props(g) }
  end

  def show
    render_success :ok, json: props(group)
  end

  def create
    group = groups.build(group_params)
    if group.save
      render_success :ok, object: 'Group', json: props(group)
    else
      render_error :unprocessable_entity, errors: group
    end
  end

  def update
    if group.update(group_params)
      render_success :ok, object: 'Group', json: props(group)
    else
      render_error :unprocessable_entity, errors: group
    end
  end

  def destroy
    if group.destroy
      render_success :ok, object: 'Group'
    else
      render_error :unprocessable_entity, errors: group
    end
  end

  private
    def groups
      current_school.student_category_groups
    end

    def group
      @group ||= groups.find_by(id: params[:id])
    end

    def group_params
      params.permit(:name, :description)
    end

    def props(group)
      {}.tap do |prop|
        prop[:id] = group.id
        prop[:name] = group.name
        prop[:description] = group.description
        prop[:count] = group.categories.count
        return prop unless action_name.to_sym == :show

        prop[:has_students] = group.category_students.exists?
      end
    end
end
