package ink.wgink.service.permission.service;

import ink.wgink.interfaces.permission.IPermissionBaseService;
import ink.wgink.interfaces.permission.IPermissionCheckService;
import ink.wgink.service.permission.pojo.vos.SystemApiVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.dtos.permission.PermissionDTO;
import ink.wgink.pojo.dtos.permission.PermissionGroupDTO;
import ink.wgink.pojo.result.SuccessResultData;
import ink.wgink.pojo.result.SuccessResultList;
import ink.wgink.service.permission.pojo.vos.PermissionVO;

import java.util.List;
import java.util.Map;

/**
 * @ClassName: IPermissionService
 * @Description: 权限
 * @Author: WenG
 * @Date: 2020-05-27 15:58
 * @Version: 1.0
 **/
public interface IPermissionService extends IPermissionBaseService, IPermissionCheckService {

    /**
     * 默认系统标识
     */
    String DEFAULT_SYSTEM_TAG = "default";


    /**
     * 新增权限
     *
     * @param permissionVO
     * @return
     * @throws Exception
     */
    void save(PermissionVO permissionVO);

    /**
     * 新增权限（快速）
     *
     * @param permissionType
     * @param systemApiVO
     */
    void saveQuick(String permissionType, SystemApiVO systemApiVO);

    /**
     * 新增权限
     *
     * @param permissionVO
     * @return permissionId
     */
    String savePermissionReturnId(PermissionVO permissionVO);

    /**
     * 删除权限
     *
     * @param ids
     * @return
     */
    void remove(List<String> ids);

    /**
     * 删除权限（物理删除）
     *
     * @param ids
     */
    void deletePermission(List<String> ids);

    /**
     * 修改权限
     *
     * @param permissionId
     * @param permissionVO
     * @return
     */
    void update(String permissionId, PermissionVO permissionVO);

    /**
     * 权限详情(通过ID)
     *
     * @param permissionId
     * @return
     */
    PermissionDTO get(String permissionId);

    /**
     * 权限列表
     *
     * @param params
     * @return
     */
    List<PermissionDTO> list(Map<String, Object> params);

    /**
     * 权限分页列表
     *
     * @param page
     * @return
     */
    SuccessResultList<List<PermissionDTO>> listPage(ListPage page);

    /**
     * 权限分组列表
     *
     * @param params
     * @return
     */
    List<PermissionGroupDTO> listGroup(Map<String, Object> params);

    /**
     * 权限统计
     *
     * @param params
     * @return
     */
    Integer countNumberPermission(Map<String, Object> params);

    /**
     * 权限统计
     *
     * @param params
     * @return
     */
    SuccessResultData<Integer> count(Map<String, Object> params);

    /**
     * 权限列表
     *
     * @param permissionIds 权限ID列表
     * @return
     */
    List<PermissionDTO> list(List<String> permissionIds);

    /**
     * 权限列表
     *
     * @param permissionType 权限类型
     * @param systemTag      系统标识
     * @return
     */
    List<PermissionDTO> list(String permissionType, String systemTag);

}