/**
  * Returns an array of $id => $name values for every category to display in an HTML select.
  *
  * @param bool $idInName
  *
  * @return array
  */
 public function getSelectList($idInName = true)
 {
     $categories = Cache::rememberForever('categorySelectList', function () {
         $list = [];
         /** @var Category[] $cats */
         $cats = Category::topLevel()->orderBy('name')->with('subcategories')->get();
         /**
          * @param array      $list
          * @param Category[] $cats
          * @param int        $level
          */
         function appendCats(&$list, $cats, $level = 0)
         {
             foreach ($cats as $cat) {
                 $list[$cat->id] = str_repeat("    ", $level) . $cat->name;
                 appendCats($list, $cat->subcategories()->orderBy('name')->get(), $level + 1);
             }
         }
         appendCats($list, $cats);
         return $list;
     });
     if ($idInName) {
         foreach ($categories as $id => $name) {
             $categories[$id] = $name . " [{$id}]";
         }
     }
     return $categories;
 }
 /**
  * @api            {get} /categories Get Top Level Categories
  * @apiGroup       Categories
  * @apiDescription Returns a list of top-level categories.
  *
  * @return \Illuminate\Http\Response
  */
 public function index()
 {
     $categories = Category::topLevel()->with('subcategories')->with('stickers')->orderBy('name')->get();
     return $this->response(['categories' => $categories]);
 }