package com.qmth.teachcloud.common.service;

import com.qmth.teachcloud.common.bean.auth.AuthBean;
import com.qmth.teachcloud.common.bean.dto.AuthOrgInfoDto;
import com.qmth.teachcloud.common.bean.result.MenuResult;
import com.qmth.teachcloud.common.entity.*;
import com.qmth.teachcloud.common.enums.PrivilegePropertyEnum;

import java.util.List;
import java.util.Set;

/**
 * @Description: 缓存操作service
 * @Param:
 * @return:
 * @Author: wangliang
 * @Date: 2021/3/25
 */
public interface CommonCacheService {

    /**
     * 添加角色缓存
     *
     * @param roleId
     * @return
     */
    public SysRole roleCache(Long roleId);

    /**
     * 修改角色缓存
     *
     * @param roleId
     * @return
     */
    public SysRole updateRoleCache(Long roleId);

    /**
     * 删除角色缓存
     *
     * @param roleId
     */
    public void removeRoleCache(Long roleId);

    /**
     * 添加用户菜单缓存
     *
     * @param userId
     * @return
     */
    public MenuResult userMenuCache(Long userId);

    /**
     * 修改用户菜单缓存
     *
     * @param userId
     * @return
     */
    public MenuResult updateUserMenuCache(Long userId);

    /**
     * 删除用户菜单缓存
     *
     * @param userId
     */
    public void removeUserMenuCache(Long userId);

    /**
     * 添加用户缓存
     *
     * @param userId
     * @return
     */
    public SysUser userCache(Long userId);

    /**
     * 修改用户缓存
     *
     * @param userId
     * @return
     */
    public SysUser updateUserCache(Long userId);

    /**
     * 删除用户缓存
     *
     * @param userId
     */
    public void removeUserCache(Long userId);

    /**
     * 添加用户鉴权缓存
     *
     * @param userId
     * @return
     */
    public AuthBean userAuthCache(Long userId);

    /**
     * 修改用户鉴权缓存
     *
     * @param userId
     * @return
     */
    public AuthBean updateUserAuthCache(Long userId);

    /**
     * 删除用户鉴权缓存
     *
     * @param userId
     */
    public void removeUserAuthCache(Long userId);

    /**
     * 添加学校缓存
     *
     * @param schoolId
     * @return
     */
    public BasicSchool schoolCache(Long schoolId);

    /**
     * 添加学校缓存
     *
     * @param code
     * @return
     */
    public BasicSchool schoolCache(String code);

    /**
     * 更新学校缓存
     *
     * @param schoolId
     * @return
     */
    public BasicSchool updateSchoolCache(Long schoolId);

    /**
     * 更新学校缓存
     *
     * @param code
     * @return
     */
    public BasicSchool updateSchoolCache(String code);

    /**
     * 删除学校缓存
     *
     * @param schoolId
     */
    public void removeSchoolCache(Long schoolId);

    /**
     * 删除学校缓存
     */
    public void removeSchoolIdCache();

    /**
     * 删除学校缓存
     *
     * @param code
     */
    public void removeSchoolCache(String code);

    /**
     * 删除学校缓存
     */
    public void removeSchoolCodeCache();

    /**
     * 添加机构缓存
     *
     * @param orgId
     * @return
     */
    public SysOrg orgCache(Long orgId);

    /**
     * 更新机构缓存
     *
     * @param orgId
     * @return
     */
    public SysOrg updateOrgCache(Long orgId);

    /**
     * 删除机构缓存
     *
     * @param orgId
     */
    public void removeOrgCache(Long orgId);

    /**
     * 删除机构缓存
     */
    public void removeOrgCache();

    /**
     * 获取鉴权url
     *
     * @param privilegePropertyEnum
     * @return
     */
    public Set<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);

    /**
     * 获取鉴权url
     *
     * @param privilegePropertyEnum
     * @param schoolId
     * @return
     */
    public Set<String> privilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum, Long schoolId);

    /**
     * 修改鉴权url
     *
     * @param privilegePropertyEnum
     * @return
     */
    public Set<String> updatePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);


    /**
     * 删除鉴权url
     *
     * @param privilegePropertyEnum
     */
    public void removePrivilegeUrlCache(PrivilegePropertyEnum privilegePropertyEnum);

    /**
     * 添加角色权限缓存
     *
     * @param roleId
     * @return
     */
    public List<SysRolePrivilege> rolePrivilegeCache(Long roleId);

    /**
     * 修改角色权限缓存
     *
     * @param roleId
     * @return
     */
    public List<SysRolePrivilege> updateRolePrivilegeCache(Long roleId);

    /**
     * 删除角色权限缓存
     *
     * @param roleId
     */
    public void removeRolePrivilegeCache(Long roleId);

    /**
     * 添加用户角色权限缓存
     *
     * @param userId
     * @return
     */
    public List<SysUserRole> userRolePrivilegeCache(Long userId);

    /**
     * 修改用户角色权限缓存
     *
     * @param userId
     * @return
     */
    public List<SysUserRole> updateUserRolePrivilegeCache(Long userId);

    /**
     * 删除用户角色权限缓存
     *
     * @param userId
     */
    public void removeUserRolePrivilegeCache(Long userId);

    /**
     * 删除考生个人报告缓存
     */
    public void removeExamStudentReportCache();

    /**
     * 删除院长缓存
     */
    public void removeCollegeDeanCache();

    /**
     * 删除学院学科缓存
     */
    public void removeCollegeCourseCache();

    /**
     * 删除开课课程考试总览图表缓存
     */
    public void removeSurveyTeacherViewCache();

    /**
     * 删除考生个人报告缓存
     *
     * @param schoolId
     * @param studentCode
     * @param examId
     * @param courseCode
     */
    public void removeExamStudentReportCache(Long schoolId, String studentCode, String examId, String courseCode);

    /**
     * 删除院长缓存
     *
     * @param schoolId
     * @param semesterId
     * @param examId
     * @param collegeId
     */
    public void removeCollegeDeanCache(Long schoolId, Long semesterId, Long examId, Long collegeId);

    /**
     * 删除考察院长课程详情报告
     *
     * @param schoolId
     * @param semesterId
     * @param examId
     * @param courseCode
     * @param collegeId
     */
    public void removeCollegeCourseCache(Long schoolId, Long semesterId, Long examId, String courseCode, Long collegeId);

    /**
     * 删除开课课程考试总览图表缓存
     *
     * @param schoolId
     * @param semesterId
     * @param examId
     * @param courseCode
     * @param collegeId
     */
    public void removeSurveyTeacherViewCache(Long schoolId, Long semesterId, Long examId, String courseCode, Long collegeId);

    /**
     * 添加鉴权缓存
     *
     * @param code
     * @return
     */
    public AuthOrgInfoDto authInfoCache(String code);

    /**
     * 修改鉴权缓存
     *
     * @param code
     * @return
     */
    public AuthOrgInfoDto updateAuthInfoCache(String code);

    /**
     * 删除鉴权缓存
     *
     * @param code
     */
    public void removeAuthInfoCache(String code);

    /**
     * 添加系统参数缓存
     *
     * @param key
     * @return
     */
    public SysConfig addSysConfigCache(String key);

    /**
     * 更新系统参数缓存
     *
     * @param key
     * @return
     */
    public SysConfig updateSysConfigCache(String key);

    /**
     * 删除系统参数缓存
     *
     * @param key
     */
    public void removeSysConfigCache(String key);

    /**
     * 添加系统参数缓存
     *
     * @param schoolId
     * @param key
     * @return
     */
    public SysConfig addSysConfigCache(Long schoolId, String key);

    /**
     * 更新系统参数缓存
     *
     * @param schoolId
     * @param key
     * @return
     */
    public SysConfig updateSysConfigCache(Long schoolId, String key);

    /**
     * 删除系统参数缓存
     *
     * @param schoolId
     * @param key
     */
    public void removeSysConfigCache(Long schoolId, String key);

    /**
     * 添加学院级别机构缓存
     *
     * @param schoolId 学校id
     * @return 学院级别机构集合
     */
    List<SysOrg> addOrgCollegeLevelCache(Long schoolId);

    /**
     * 修改学院级别机构缓存
     *
     * @param schoolId 学校id
     * @return 学院级别机构集合
     */
    List<SysOrg> updateOrgCollegeLevelCache(Long schoolId);

    /**
     * 删除学院级别机构缓存
     *
     * @param schoolId 学校id
     */
    void removeOrgCollegeLevelCache(Long schoolId);
}
