//----------SysMenu开始----------


using Admin.Core.Model;
using Admin.Core.Model.Sys;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace Admin.Core.IService.ISys
{
    /// <summary>
    /// 菜单权限表IService
    /// </summary>	
    public interface ISysMenuService : IBaseServices<SysMenu>
    {

        /// <summary>
        /// 根据用户查询系统菜单列表
        /// </summary>
        /// <param name="userId"> 用户ID </param>
        /// <param name="pageQuery"> 查询参数 </param>
        /// <returns> 菜单列表 </returns>
        Task<List<SysMenu>> SelectMenuList(int userId, PageQuery<SysMenu> pageQuery);

        /// <summary>
        /// 根据用户查询系统菜单列表
        /// </summary>
        /// <param name="userId"> 用户ID </param>
        /// <returns> 菜单列表 </returns>
        Task<List<SysMenu>> SelectMenuList(int userId);

        /// <summary>
        /// 根据用户ID查询权限
        /// </summary>
        /// <param name="userId"> 用户ID </param>
        /// <returns> 权限列表 </returns>
        Task<List<string>> SelectMenuPermsByUserId(int userId);

        /// <summary>
        /// 根据用户ID查询菜单树信息
        /// </summary>
        /// <param name="userId"> 用户ID </param>
        /// <returns> 菜单列表 </returns>
        Task<List<MenuView>> SelectMenuTreeByUserId(int userId);

        /// <summary>
        /// 根据角色ID查询菜单树信息
        /// </summary>
        /// <param name="roleId"> 角色ID </param>
        /// <returns> 选中菜单列表 </returns>
        Task<List<int>> SelectMenuListByRoleId(int roleId);

        /// <summary>
        /// 构建前端路由所需要的菜单
        /// </summary>
        /// <param name="menus"> 菜单列表 </param>
        /// <returns> 路由列表 </returns>
        List<RouterVo> BuildMenus(List<MenuView> menus);

        /// <summary>
        /// 构建前端所需要树结构
        /// </summary>
        /// <param name="menus"> 菜单列表 </param>
        /// <returns> 树结构列表 </returns>
        List<MenuView> BuildMenuTree(List<MenuView> menus);

        /// <summary>
        /// 构建前端所需要下拉树结构
        /// </summary>
        /// <param name="menus"> 菜单列表 </param>
        /// <returns> 下拉树结构列表 </returns>
        List<TreeSelect> BuildMenuTreeSelect(List<SysMenu> menus);

        /// <summary>
        /// 根据菜单ID查询信息
        /// </summary>
        /// <param name="menuId"> 菜单ID </param>
        /// <returns> 菜单信息 </returns>
        Task<SysMenu> SelectMenuById(int menuId);

        /// <summary>
        /// 是否存在菜单子节点
        /// </summary>
        /// <param name="menuId"> 菜单ID </param>
        /// <returns> 结果 true 存在 false 不存在 </returns>
        Task<bool> HasChildByMenuId(int menuId);

        /// <summary>
        /// 查询菜单是否存在角色
        /// </summary>
        /// <param name="menuId"> 菜单ID </param>
        /// <returns> 结果 true 存在 false 不存在 </returns>
        Task<int> CheckMenuExistRole(int menuId);

        /// <summary>
        /// 新增保存菜单信息
        /// </summary>
        /// <param name="menu"> 菜单信息 </param>
        /// <returns> 结果 </returns>
        Task<int> InsertMenu(SysMenu menu);

        /// <summary>
        /// 修改保存菜单信息
        /// </summary>
        /// <param name="menu"> 菜单信息 </param>
        /// <returns> 结果 </returns>
        Task<bool> UpdateMenu(SysMenu menu);

        /// <summary>
        /// 删除菜单管理信息
        /// </summary>
        /// <param name="menuId"> 菜单ID </param>
        /// <returns> 结果 </returns>
        Task<bool> DeleteMenuById(int menuId);

        /// <summary>
        /// 校验菜单名称是否唯一
        /// </summary>
        /// <param name="menu"> 菜单信息 </param>
        /// <returns> 结果 </returns>
        Task<bool> CheckMenuNameUnique(SysMenu menu);

    }
}

//----------SysMenu结束----------