package com.ytpm.middle.dao;

import com.ytpm.middle.model.YtMiddlePermission;
import com.ytpm.middle.param.MiddlePermissionParam;
import com.ytpm.middle.view.DropDownVO;
import com.ytpm.middle.view.MiddlePermissionVO;
import com.ytpm.middle.view.MiddleRoleVO;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.util.List;

@Mapper
public interface PermissionMapper {
    /**
     * 查询一级菜单
     */
    List<MiddlePermissionVO> getFirstMenu(MiddlePermissionParam param);

    /**
     * 查询所有菜单
     */
    List<MiddlePermissionVO> queryAll(MiddlePermissionParam param);

    /**
     * 根据路由获取菜单
     */
    YtMiddlePermission getByRoute(@Param("route") String route);

    /**
     * 根据权限编码获取权限
     */
    YtMiddlePermission getByCode(@Param("permissionCode") String permissionCode);

    /**
     * 新增权限
     */
    void insertOne(YtMiddlePermission middlePermission);
    /**
     * 修改权限
     */
    void updateById(YtMiddlePermission middlePermission);

    /**
     * 删除权限
     */
    YtMiddlePermission selectPrimary(@Param("permissionId") int permissionId);

    /**
     * 删除子权限
     */
    void delByParentId(@Param("permissionId")int permissionId,@Param("userId")String userId);
    /**
     * 查询权限下拉列表
     */
    List<DropDownVO> permissionDropList();

    /**
     * 根据类型查询权限列表
     */
    List<MiddlePermissionVO> selectByType(@Param("type") String type);

    /**
     * 根据角色ID查询菜单
     */
    List<MiddlePermissionVO> getFirstMenuByRoleIds(@Param("roleIdList") List<Integer> roleIdList);

    /**
     * 查询指定菜单的权限列表
     */
    List<MiddlePermissionVO> getByParentId(@Param("permissionId") Integer permissionId, @Param("roleIds") String roleIds);

    /**
     * 给角色分配权限
     */
    void addRolePermissions(@Param("roleId")Integer roleId, @Param("permissionIds") String permissionIds, @Param("operatorId") String operatorId);

    /**
     * 根据角色
     */
    void delByRoleId(@Param("roleId") Integer roleId);

    /**
     * 根据角色查询所有权限
     */
    List<MiddlePermissionVO> queryAllByRole(@Param("roleId") Integer roleId);

    /**
     * 根据角色查询所有权限
     */
    List<MiddlePermissionVO> queryAllByRoleIds(@Param("roleIdList") List<Integer> roleIdList);
}
