<?php

namespace App\Http\Controllers\Traits;

/**
 * Contains useful methods for Taxonomy Controllers
 *
 * Trait ModelHelper
 * @package App\Database\Traits
 */
trait TaxonomyHelper
{
    /**
     * Builds an hierarchical list
     *
     * @param $list
     * @return null
     */
    private function _buildHierarchy($list)
    {
        list($parents, $children) = $list->partition(function ($value) {
            return is_null($value->parent_id);
        });
        return $this->_getChildren($parents, $children);
    }

    private function _getChildren($parents = null, $children = null)
    {
        // Loop into main parents
        // Add their direct children
        forEach ($parents as $parent) {
            list($childOf, $notChildOf) = $children->partition(function ($value) use ($parent) {
                return $parent->website_object_id === $value->parent_id;
            });

            $parent->children = $childOf;

            $this->_getChildren($parent->children, $notChildOf);
        }

        return $parents;
    }
}
