package com.sunda.spmsuser.mapper;

import com.sunda.spmsuser.entity.SpmsMenu;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;

/**
 * <p>
 * 菜单表 Mapper 接口
 * </p>
 *
 * @author Wayne
 * @since 2023-05-25
 */
@Mapper
@Component
public interface SpmsMenuMapper extends BaseMapper<SpmsMenu> {
	
	@Select("<script>" +
    		"SELECT SR.MENU_ID AS \"menuId\",\n" +
            "       SR.PARENT_ID AS \"parentId\",\n" +
            "       SR.MENU_NAME AS \"menuName\",\n" +
            "       SR.MENU_EN_NAME AS \"menuEnName\",\n" +
			"       SR.MENU_RU_NAME AS \"menuRuName\",\n" +
			"       SR.MENU_FA_NAME AS \"menuFaName\",\n" +
            "       SR.URL AS \"url\",\n" +
            "       SR.COMPONENT_URL AS \"componentUrl\",\n" +
            "       SR.COMPONENT_NAME AS \"componentName\",\n" +
            "       SR.REDIRECT AS \"redirect\",\n" +
            "       SR.MENU_TYPE AS \"menuType\",\n" +
            "       SR.PERMS AS \"perms\",\n" +
            "       SR.PERMS_TYPE AS \"permsType\",\n" +
            "       SR.SORT_NO AS \"sortNo\",\n" +
            "       SR.ALWAYS_SHOW AS \"alwaysShow\",\n" +
            "       SR.ICON AS \"icon\",\n" +
            "       SR.IS_ROUTE AS \"isRoute\",\n" +
            "       SR.IS_LEAF AS \"isLeaf\",\n" +
            "       SR.DESCRIPTION AS \"description\",\n" +
            "       SR.CREATE_TIME AS \"createTime\",\n" +
            "       SR.CREATE_USER AS \"createUser\",\n" +
            "       SR.UPDATE_USER AS \"updateUser\",\n" +
            "       SR.UPDATE_TIME AS \"updateTime\"\n" +
            "FROM SPMS_MENU SR\n" +
            "WHERE 1=1 \n" +
            "	AND SR.IS_ROUTE = 0 \n" +
            "	<when test='dto.menuType != null and dto.menuType != \"\"'> AND SR.MENU_TYPE = #{dto.menuType} </when> \n" +
            "	<when test='dto.menuId != null and dto.menuId != \"\"'> AND SR.MENU_ID = #{dto.menuId} </when> \n" +
            "	<when test='dto.menuName != null and dto.menuName != \"\"'> AND (SR.MENU_NAME LIKE CONCAT('%',CONCAT(#{dto.menuName},'%')) OR SR.MENU_EN_NAME LIKE CONCAT('%',CONCAT(#{dto.menuName},'%'))) </when> \n" +
            "	ORDER BY SR.MENU_ID ASC \n" +
            "</script>")
	List<Map<String, Object>> selectMenuListByPage(@Param("dto") SpmsMenu dto);
	
	@Select("<script>" +
    		"SELECT SR.MENU_ID AS \"menuId\",\n" +
            "       SR.PARENT_ID AS \"parentId\",\n" +
            "       SR.MENU_NAME AS \"menuName\",\n" +
            "       SR.MENU_EN_NAME AS \"menuEnName\",\n" +
			"       SR.MENU_RU_NAME AS \"menuRuName\",\n" +
			"       SR.MENU_FA_NAME AS \"menuFaName\",\n" +
            "       SR.URL AS \"url\",\n" +
            "       SR.COMPONENT_URL AS \"componentUrl\",\n" +
            "       SR.COMPONENT_NAME AS \"componentName\",\n" +
            "       SR.REDIRECT AS \"redirect\",\n" +
            "       SR.MENU_TYPE AS \"menuType\",\n" +
            "       SR.PERMS AS \"perms\",\n" +
            "       SR.PERMS_TYPE AS \"permsType\",\n" +
            "       SR.SORT_NO AS \"sortNo\",\n" +
            "       SR.ALWAYS_SHOW AS \"alwaysShow\",\n" +
            "       SR.ICON AS \"icon\",\n" +
            "       SR.IS_ROUTE AS \"isRoute\",\n" +
            "       SR.IS_LEAF AS \"isLeaf\",\n" +
            "       SR.DESCRIPTION AS \"description\",\n" +
            "       SR.CREATE_TIME AS \"createTime\",\n" +
            "       SR.CREATE_USER AS \"createUser\",\n" +
            "       SR.UPDATE_USER AS \"updateUser\",\n" +
            "       SR.UPDATE_TIME AS \"updateTime\"\n" +
            "FROM SPMS_MENU SR\n" +
            "WHERE 1=1 \n" +
            "	AND SR.IS_ROUTE = 0 \n" +
            "	<when test='dto.menuType != null and dto.menuType != \"\"'> AND SR.MENU_TYPE = #{dto.menuType} </when> \n" +
            "	<when test='dto.parentId != null and dto.parentId != \"\"'> AND SR.PARENT_ID = #{dto.parentId} </when> \n" +
            "	<when test='dto.menuName != null and dto.menuName != \"\"'> AND (SR.MENU_NAME LIKE CONCAT('%',CONCAT(#{dto.menuName},'%')) OR SR.MENU_EN_NAME LIKE CONCAT('%',CONCAT(#{dto.menuName},'%'))) </when> \n" +
            "	ORDER BY SR.MENU_ID+0 ASC \n" +
            "</script>")
	List<Map<String, Object>> selectMenuList(@Param("dto") SpmsMenu dto);
	
	@Select("<script>" +
			"	SELECT MAX(MENU_ID+0) AS \"menuId\" \n" +  
			" 	FROM SPMS_MENU where MENU_TYPE = #{dto.menuType} \n" +
			"	<when test='dto.parentId != null and dto.parentId != \"\"'> AND PARENT_ID = #{dto.parentId} </when> \n" +
			"</script>")
	Map<String, Object> selectMenuMaxId(@Param("dto") SpmsMenu spmsMenu);
	
	@Select("<script>" +
			"	SELECT MENU_ID FROM SPMS_ROLE_MENU where ROLE_UUID = #{roleUuid} \n" +
			"</script>")
	List<String> selectRoleMenuList(@Param("roleUuid") String roleUuid);
	
	@Select("SELECT DISTINCT\n" +
            "	sm.MENU_ID AS \"menuId\",\n" +
            "   sm.PARENT_ID AS \"parentId\",\n" +
            "   sm.MENU_NAME AS \"menuName\",\n" +
            "   sm.MENU_EN_NAME AS \"menuEnName\",\n" +
			"   sm.MENU_RU_NAME AS \"menuRuName\",\n" +
			"   sm.MENU_FA_NAME AS \"menuFaName\",\n" +
            "   sm.URL AS \"url\",\n" +
            "   sm.COMPONENT_URL AS \"componentUrl\",\n" +
            "   sm.COMPONENT_NAME AS \"componentName\",\n" +
            "   sm.REDIRECT AS \"redirect\",\n" +
            "   sm.MENU_TYPE AS \"menuType\",\n" +
            "   sm.SORT_NO AS \"sortNo\",\n" +
            "   sm.ICON AS \"icon\",\n" +
            "   sm.DESCRIPTION AS \"description\" \n" +
            "FROM SPMS_USER u\n" +
            "    LEFT JOIN SPMS_USER_ROLE ur ON u.WORK_CODE = ur.WORK_CODE\n" +
            "    LEFT JOIN SPMS_ROLE r ON ur.ROLE_UUID = r.UUID\n" +
            "    LEFT JOIN SPMS_ROLE_MENU rp ON r.UUID = rp.ROLE_UUID\n" +
            "    LEFT JOIN SPMS_MENU sm ON sm.MENU_ID = rp.MENU_ID\n" +
            "WHERE sm.IS_ROUTE = '0' \n" +
            "  AND u.WORK_CODE = #{userId} \n" +
            "ORDER BY sm.MENU_ID+0 ASC,sm.SORT_NO+0 ASC")
	List<Map<String, Object>> selectMenuListByUserId(@Param("userId") String userId);

}
