/**
* 文件：MenuService.java
* 版本：1.0.0
* 日期：
* Copyright &reg; 
* All right reserved.
*/

package com.mortals.xhx.base.system.menu.service;


import com.mortals.framework.exception.AppException;
import com.mortals.framework.model.Context;
import com.mortals.framework.service.ICRUDService;
import com.mortals.framework.service.IUser;
import com.mortals.xhx.base.system.menu.model.MenuEntity;
import com.mortals.xhx.base.system.menu.model.MenuTreeSelect;

import java.util.List;
import java.util.Set;

/**
 * 菜单资源类
 * @author: zxfei
 * @date: 2024/9/6 16:28
 */
public interface MenuService extends ICRUDService<MenuEntity,Long> {
    /**
     * 获取所有可用菜单
     *
     * @return
     * @throws AppException
     */
     List<MenuEntity> findAllEnable() throws AppException;

    /**
     * 查询有权限的菜单
     *
     * @param user 当前用户
     * @return
     * @throws AppException
     */
    List<MenuEntity> findTreeMenu(IUser user) throws AppException;

    /**
     * 更新排列顺序
     * @param id
     * @param type
     */
    void upOrDown(Long id, Integer type);



    /**
     * 是否存在菜单信息业务节点
     *
     * @param menuId 菜单信息业务ID
     * @return 结果
     */
    boolean hasChildByMenuId(Long menuId);

    /**
     * 构建树
     * @param menuList
     * @return
     */
    List<MenuEntity> buildMenuTree(List<MenuEntity> menuList);


    /**
     * 构建前端所需要下拉树结构
     *
     * @param menuList 菜单信息业务列表
     * @return 下拉树结构列表
     */
    List<MenuTreeSelect> buildMenuTreeSelect(List<MenuEntity> menuList);


    /**
     * 构建树，包含是否选中
     * @param allMenuList
     * @param menuIdsChecked
     * @return
     */
    List<MenuTreeSelect> buildMenuTreeChecked(List<MenuEntity> allMenuList, Set<Long> menuIdsChecked);


    /**
     * 根据父id查询子节点
     * @param parentId
     * @param context
     * @return
     */
    List<MenuTreeSelect> getListByParentId(Long parentId, Context context);


}