package com.usky.system.mapper;

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

import java.util.List;

/**
 * <p>
 * 移动端_菜单权限表 Mapper 接口
 * </p>
 *
 * @author JCB
 * @since 2022-08-11
 */
@Repository
public interface SysMobileMenuMapper extends CrudMapper<SysMobileMenu> {

    /**
     * 根据租户查询系统菜单
     *
     * @param tenantId 租户ID
     * @return
     */
    public List<SysMobileMenu> selectMenuListOne(@Param("tenantId") Integer tenantId);

    /**
     * 获取所有菜单列表
     *
     * @return 菜单列表
     */
    public List<SysMobileMenu> selectMenuTreeAll();

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

    /**
     * 根据用户Id查询菜单
     *
     * @param userId 用户Id
     * @return 菜单列表
     */
    public List<SysMobileMenu> selectMenuTreeByUserId1(@Param("userId") long userId,
                                                       @Param("tenantId") Integer tenantId);

    /**
     * 根据租户Id查询菜单
     *
     * @param tenantId 租户Id
     * @return 菜单列表
     */
    public List<SysMobileMenu> selectMenuTreeByUserIdOne(@Param("tenantId") Integer tenantId);


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

    /**
     * 查询系统菜单列表
     *
     * @param menu 菜单信息
     * @return 菜单列表
     */
    public List<SysMobileMenu> selectMobileMenuList(SysMobileMenu menu);

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

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

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

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

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

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

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