package com.usky.system.mapper;


import com.usky.common.mybatis.core.CrudMapper;
import com.usky.system.domain.SysMenu;
import com.usky.system.domain.SysMobileMenu;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;


/**
 * 菜单表 数据层
 *
 * @author yq
 */
@Repository
public interface SysMenuMapper extends CrudMapper<SysMenu> {
    /**
     * 查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuList(SysMenu menu);

    /**
     * 根据租户查询系统菜单
     *
     * @param tenantId 租户ID
     * @param menuName 目录名册
     * @return
     */
    public List<SysMenu> selectMenuListOne(@Param("tenantId") Integer tenantId,
                                           @Param("menuName") String menuName);

    /**
     * 根据用户所有权限
     *
     * @return 权限列表
     */
    public List<String> selectMenuPerms();

    /**
     * 根据用户查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuListByUserId(SysMenu menu);

    public List<SysMenu> selectMenuListByUserIdOne(@Param("userId") Long userId);

    public List<SysMobileMenu> selectMobileMenuListByUserIdOne(@Param("userId") Long userId);

    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    public List<String> selectMenuPermsByUserId(@Param("userId") Long userId);

    public List<String> selectMenuPermsByUserIdOne(@Param("tenantId") Integer tenantId);

    /**
     * 根据用户ID查询菜单
     *
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuTreeAll();

    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    public List<SysMenu> selectMenuTreeByUserId(@Param("userId") Long userId);

    /**
     * 根据用户ID查询菜单
     *
     * @param userId 用户ID
     * @param platformId 应用ID
     * @return 应用级菜单列表
     */
    public List<SysMenu> selectMenuTreeByUserId1(@Param("userId") Long userId,
                                                 @Param("platformId") Long platformId,
                                                 @Param("tenantId") Integer tenantId);

    public List<SysMenu> selectMenuTreeByUserIdOne(@Param("tenantId") Integer tenantId);

    public List<SysMenu> selectMenuTreeByUserIdOne1(@Param("tenantId") Integer tenantId,@Param("platformId") Integer platformId);

    /**
     * 根据角色ID查询菜单树信息
     *
     * @param roleId            角色ID
     * @param menuCheckStrictly 菜单树选择项是否关联显示
     * @return 选中菜单列表
     */
    public List<Integer> selectMenuListByRoleId(@Param("roleId") Long roleId,
                                                @Param("menuCheckStrictly") boolean menuCheckStrictly);

    /**
     * 根据菜单ID查询信息
     *
     * @param menuId 菜单ID
     * @return 菜单信息
     */
    public SysMenu selectMenuById(@Param("menuId") Long menuId);

    /**
     * 是否存在菜单子节点
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    public int hasChildByMenuId(@Param("menuId") Long menuId);

    /**
     * 新增菜单信息
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public int insertMenu(SysMenu menu);

    /**
     * 修改菜单信息
     *
     * @param menu 菜单信息
     * @return 结果
     */
    public int updateMenu(SysMenu menu);

    /**
     * 删除菜单管理信息
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    public int deleteMenuById(@Param("menuId") Long menuId);

    /**
     * 校验菜单名称是否唯一
     *
     * @param menuName 菜单名称
     * @param parentId 父菜单ID
     * @return 结果
     */
    public SysMenu checkMenuNameUnique(@Param("menuName") String menuName,
                                       @Param("parentId") Long parentId);

    /**
     * 校验路由地址是否唯一（同一父菜单下）
     *
     * @param path     路由地址
     * @param parentId 父菜单ID
     * @return 结果
     */
    public SysMenu checkMenuPathUnique(@Param("path") String path,
                                       @Param("parentId") Long parentId);

    public List<SysMenu> getSysMenuList(String menuType);

    public List<SysMenu> getTenantPlatformMenuList(@Param("tenantId") Integer tenantId,@Param("platformId") Integer platformId);

}
