package io.renren.modules.admin.service.impl;

import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.Query;

import io.renren.modules.admin.dao.CategoryDao;
import io.renren.modules.admin.entity.CategoryEntity;
import io.renren.modules.admin.service.CategoryService;

@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService {

    // @Override
    // public PageUtils queryPage(Map<String, Object> params) {
    //     IPage<CategoryEntity> page = this.page(new Query<CategoryEntity>().getPage(params),
    //             new QueryWrapper<CategoryEntity>());

    //     return new PageUtils(page);
    // }

    @Override
    public List<CategoryEntity> queryNotLastList() {
        return baseMapper.queryNotLastList();
    }

    @Override
    public List<CategoryEntity> queryNotLastTreeList() {
        List<CategoryEntity> list = baseMapper.queryNotLastList();
        List<CategoryEntity> treeList = makeTree(list, 0L);
        return treeList;
    }

    @Override
    public List<CategoryEntity> queryTreeList() {
        List<CategoryEntity> list = this.list();
        List<CategoryEntity> treeList = makeTree(list, 0L);

        return treeList;
    }

    /**
     * 无限级分类
     * @param list
     * @param pk 主键名 id
     * @param pid 父id键名 parentId
     * @param child 子列名 list
     * @param root 根id值 0L
     * @return
     */
    public List<CategoryEntity> makeTree(List<CategoryEntity> list, Long root) {
        List<CategoryEntity> treeList = new ArrayList<>();

        // for (CategoryEntity categoryEntity : list) {     // foreach 循环时调用的i一直在++ 删除后 就找不到i对应的值
        //     if (categoryEntity.getParentId() == root) {
        //         // categoryEntity = null;
        //         list.remove(categoryEntity);
        //         if (!list.isEmpty()) {
        //             List<CategoryEntity> childList = makeTree(list, categoryEntity.getId());
        //             if (childList != null) {
        //                 categoryEntity.setList(childList);
        //             }
        //         }
        //         treeList.add(categoryEntity);
        //     }
        // }
        for (int i = 0; i < list.size(); i++) {
            CategoryEntity categoryEntity = list.get(i);
            if (categoryEntity.getParentId() == root) {
                // categoryEntity = null;
                list.remove(i);
                i--;
                if (!list.isEmpty()) {
                    List<CategoryEntity> childList = makeTree(list, categoryEntity.getId());
                    if (childList.size() == 0) {
                        categoryEntity.setList(null);
                    } else {
                        categoryEntity.setList(childList);
                    }
                    // if (childList != null) {
                    //     categoryEntity.setList(childList);
                    // } else {
                    //     categoryEntity.setList(null);
                    // }
                }
                treeList.add(categoryEntity);
            }
        }

        return treeList;
    }

    // /**
    //  * 无限级分类
    //  * @param list
    //  * @param pk 主键名
    //  * @param pid 父id键名
    //  * @param child 子列名
    //  * @param root 根id值
    //  * @return
    //  */
    // public List<CategoryEntity> makeTree(List<CategoryEntity> list, String pk, String pid, String child, Long root) {
    //     return null;
    // }

    /*无限级分类*/
// function make_tree($list, $pk = 'id', $pid = 'pid', $child = 'child', $root = 0)
// {
//     $tree = array();
//     foreach ($list as $key => $val) {
//         if ($val[$pid] == $root) {
//             unset($list[$key]);
//             if (!empty($list)) {
//                 $child = make_tree($list, $pk, $pid, $child, $val[$pk]);
//                 if (!empty($child)) {
//                     $val['child'] = $child;
//                 } else {
//                     $val['child'] = array();
//                 }
//             }
//             $tree[] = $val;
//         }
//     }
//     return $tree;
// }
}