package jnpf.personnels.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import jnpf.base.UserInfo;
import jnpf.model.cultivate.vo.identify.IdentifyAppAuthorityAppraiserVO;
import jnpf.model.personnels.dto.authoritys.FtbAddNewPermissionsDTO;
import jnpf.model.personnels.dto.authoritys.FtbAddNewPermissionsUpdateDTO;
import jnpf.model.personnels.dto.authoritys.FtbPermissionInfoDTO;
import jnpf.model.personnels.po.FtbPersonnelsPermissions;
import com.baomidou.mybatisplus.extension.service.IService;
import jnpf.model.personnels.vo.authoritys.FtbPermissionInfoVO;
import jnpf.model.personnels.vo.authoritys.FtbPersonnelsPermissionUserVO;
import jnpf.model.personnels.vo.authoritys.FtbPersonnelsPermissionVO;
import jnpf.model.personnels.vo.authoritys.FtbPersonnelsScopeVO;

import java.util.List;

public interface FtbPersonnelsPermissionsService extends IService<FtbPersonnelsPermissions> {


    /**
     * 删除指定的权限
     *
     * @param id 权限的唯一标识
     */
    void deletePermissions(String id);

    /**
     * 在添加时查询权限列表
     *
     * @param moduleType 模块类型
     * @return 返回权限列表
     */
    List<FtbPersonnelsPermissionVO> queryThePermissionListWhenAdding(Long moduleType);

    /**
     * 根据用户信息、父权限和权限类型查询权限列表
     *
     * @param userInfo          用户信息
     * @param parentPermissions 父权限
     * @param permissionType    权限类型
     * @return 返回权限列表
     */
    List<String> queryPermissionList(UserInfo userInfo, String parentPermissions, Integer permissionType);

    /**
     * 添加新的权限
     *
     * @param ftbAddNewPermissionsDTO 包含新的权限信息的数据传输对象
     */
    void addNewPermissions(FtbAddNewPermissionsDTO ftbAddNewPermissionsDTO);

    /**
     * 添加新的权限变更
     *
     * @param ftbAddNewPermissionsUpdateDTO 包含新的权限变更信息的数据传输对象
     */
    void addNewPermissionsChange(FtbAddNewPermissionsUpdateDTO ftbAddNewPermissionsUpdateDTO);

    /**
     * 查询管理员详情
     *
     * @param id 管理员的唯一标识
     * @param moduleType 模块类型
     * @return 返回管理员详情
     */
    FtbPersonnelsPermissionUserVO adminDetails(String id, Long moduleType);

    /**
     * 查询权限列表
     *
     * @param page 分页对象
     * @param ftbPermissionInfoDTO 权限信息查询条件
     * @return 返回权限列表的分页结果
     */
    Page<FtbPermissionInfoVO> permissionList(Page<FtbPermissionInfoVO> page, FtbPermissionInfoDTO ftbPermissionInfoDTO);

    /**
     * 查询指定组织的权限评估师
     *
     * @param orgId 组织ID
     * @return 返回权限评估师列表
     */
    List<IdentifyAppAuthorityAppraiserVO> queryAuthorityAppraiser(String orgId);

    /**
     * 选择组织范围
     *
     * @return 返回组织范围信息
     */
    FtbPersonnelsScopeVO selectOrganizationScope();

    /**
     * 选择员工范围
     *
     * @return 返回员工范围信息
     */
    FtbPersonnelsScopeVO selectEmployeeRange();

    /**
     * 清除用户权限
     *
     * @param userId 用户主键ID
     */
    void clearUserPermissions(String userId);

    /**
     * 此用户是否是员工，true为是，false为否
     */
    Boolean isThisUserAnEmployee();
}
