package com.qmth.themis.business.service;

import com.qmth.themis.business.bean.admin.ExamListBean;
import com.qmth.themis.business.dto.AuthDto;
import com.qmth.themis.business.dto.cache.TEStudentCacheDto;
import com.qmth.themis.business.entity.*;

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

/**
 * @Description: 缓存 服务类
 * @Param:
 * @return:
 * @Author: wangliang
 * @Date: 2020/6/27
 */
public interface ThemisCacheService {

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

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

    /**
     * 添加机构编码缓存
     *
     * @param code
     * @return
     */
    public TBOrg addOrgCodeCache(String code);

    /**
     * 更新机构编码缓存
     *
     * @param code
     * @return
     */
    public TBOrg updateOrgCodeCache(String code);

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

    /**
     * 删除机构编码缓存
     *
     * @param code
     */
    public void removeOrgCodeCache(String code);

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

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

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

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

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

    /**
     * 更新用户缓存
     *
     * @param userId
     * @return
     */
    public TBUser updateAccountCache(Long userId);

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

    /**
     * 添加学生鉴权缓存
     *
     * @param studentId
     * @return
     */
    public AuthDto addStudentAuthCache(Long studentId);

    /**
     * 删除学生鉴权缓存
     *
     * @param studentId
     */
    public void removeStudentAuthCache(Long studentId);

    /**
     * 添加学生缓存
     *
     * @param studentId
     * @return
     */
    public TEStudentCacheDto addStudentAccountCache(Long studentId);

    /**
     * 更新学生缓存
     *
     * @param studentId
     * @return
     */
    public TEStudentCacheDto updateStudentAccountCache(Long studentId);

    /**
     * 删除学生缓存
     *
     * @param studentId
     */
    public void removeStudentAccountCache(Long studentId);

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

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

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

//    /**
//     * 添加鉴权缓存
//     *
//     * @param code
//     * @return
//     */
//    public AuthOrgInfoDto authInfoCache(String code);
//
//    /**
//     * 修改鉴权缓存
//     *
//     * @param code
//     * @return
//     */
//    public AuthOrgInfoDto updateAuthInfoCache(String code);
//
//    /**
//     * 删除鉴权缓存
//     *
//     * @param code
//     */
//    public void removeAuthInfoCache(String code);

    /**
     * 添加考试语音缓存
     *
     * @param id
     * @return
     */
    public TEAudio examAudioCache(Long id);

    /**
     * 修改考试语音缓存
     *
     * @param id
     * @return
     */
    public TEAudio updateExamAudioCache(Long id);

    /**
     * 删除考试语音缓存
     *
     * @param id
     */
    public void removeExamAudioCache(Long id);

    /**
     * 添加附件缓存
     *
     * @param id
     * @return
     */
    public TBAttachment attachmentCache(Long id);

    /**
     * 修改附件缓存
     *
     * @param id
     * @return
     */
    public TBAttachment updateAttachmentCache(Long id);

    /**
     * 删除附件缓存
     *
     * @param id
     */
    public void removeAttachmentCache(Long id);

    /**
     * 更新系统参数缓存
     *
     * @param key
     * @param sysConfig
     */
    public void updateSysConfigCacheForDb(String key, SysConfig sysConfig);

    /**
     * 黑名单缓存
     *
     * @return
     */
    public List<TSBlackList> blackListCache();

    /**
     * 修改黑名单缓存
     *
     * @return
     */
    public List<TSBlackList> updateBlackListCache();

    /**
     * 删除黑名单缓存
     */
    public void removeBlackListCache();

    /**
     * 系统通知缓存
     *
     * @return
     */
    public List<TSNotify> sysNotifyCache();

    /**
     * 修改系统通知缓存
     *
     * @return
     */
    public List<TSNotify> updateSysNotifyCache();

    /**
     * 删除系统通知缓存
     */
    public void removeSysNotifyCache();

    /**
     * 问题缓存
     *
     * @return
     */
    public List<TBProblem> problemCache();

    /**
     * 修改问题缓存
     *
     * @return
     */
    public List<TBProblem> updateProblemCache();

    /**
     * 删除问题缓存
     */
    public void removeProblemCache();

    /**
     * 设置当前考试缓存
     */
    public void setCurrentExamListCache();

    /**
     * 获取当前考试列表缓存
     *
     * @return
     */
    public Map<String, List<ExamListBean>> getCurrentExamListCache();

    /**
     * 设置机构考试列表缓存
     */
    public void setOrgExamListCache();

    /**
     * 获取机构考试列表缓存
     *
     * @param orgId
     * @return
     */
    public Map<String, Set<Long>> getOrgExamListCache(String orgId);

    /**
     * 获取机构考试列表缓存
     *
     * @param orgId
     * @param examId
     * @return
     */
    public Set<Long> getOrgExamListCache(String orgId, String examId);

    /**
     * 更新机构考试列表缓存
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     */
    public void updateOrgExamListCache(String orgId, String examId, Long examActivityId);

    /**
     * 删除机构考试列表缓存
     *
     * @param orgId
     */
    public void removeOrgExamListCache(String orgId);

    /**
     * 删除机构考试列表缓存
     *
     * @param orgId
     * @param examId
     */
    public void removeOrgExamListCache(String orgId, String examId);

    /**
     * 删除机构考试列表缓存
     *
     * @param orgId
     * @param examId
     * @param examActivityId
     */
    public void removeOrgExamListCache(String orgId, String examId, Long examActivityId);

    /**
     * 获取当前考试缓存
     *
     * @param examId
     * @return
     */
    public List<ExamListBean> getCurrentExamListCache(String examId);

    /**
     * 更新当前考试缓存
     *
     * @param examId
     * @param examActivityId
     */
    public void updateCurrentExamListCache(String examId, Long examActivityId);

    /**
     * 删除当前考试缓存
     *
     * @return
     */
    public void removeCurrentExamListCache(String examId);

    /**
     * 删除当前考试缓存
     *
     * @return
     */
    public void removeCurrentExamListCache(String examId, Long examActivityId);

    /**
     * 获取考试统计缓存
     *
     * @param examId
     * @return
     */
    public List<TEExamSummary> getExamSummaryCache(Long examId);

    /**
     * 获取考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @return
     */
    public List<TEExamSummary> getExamSummaryCache(Long examId, Long examActivityId);

    /**
     * 获取考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @return
     */
    public List<TEExamSummary> getExamSummaryCache(Long examId, Long examActivityId, String roomCode);

    /**
     * 修改考试统计缓存
     *
     * @param examId
     * @return
     */
    public List<TEExamSummary> updateExamSummaryCache(Long examId);

    /**
     * 修改考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @return
     */
    public List<TEExamSummary> updateExamSummaryCache(Long examId, Long examActivityId);

    /**
     * 修改考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     * @return
     */
    public List<TEExamSummary> updateExamSummaryCache(Long examId, Long examActivityId, String roomCode);

    /**
     * 删除考试统计缓存
     *
     * @param examId
     */
    public void removeExamSummaryCache(Long examId);

    /**
     * 删除考试统计缓存
     *
     * @param examId
     * @param examActivityId
     */
    public void removeExamSummaryCache(Long examId, Long examActivityId);

    /**
     * 删除考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     */
    public void removeExamSummaryCache(Long examId, Long examActivityId, String roomCode);

    /**
     * 获取机构统计缓存
     *
     * @param orgId
     * @return
     */
    public TEOrgSummary getOrgSummaryCache(Long orgId);

    /**
     * 更新机构统计缓存
     *
     * @param orgId
     * @return
     */
    public TEOrgSummary updateOrgSummaryCache(Long orgId);

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

    /**
     * 获取地区统计缓存
     *
     * @return
     */
    public List<TERegionSummary> getRegionSummaryCache();

    /**
     * 更新地区统计缓存
     *
     * @return
     */
    public List<TERegionSummary> updateRegionSummaryCache();

    /**
     * 删除地区统计缓存
     */
    public void removeOrgSummaryCache();

    /**
     * 删除全部考试统计缓存
     *
     * @param examId
     * @param examActivityId
     * @param roomCode
     */
    public void removeExamSummaryAllCache(Long examId, Long examActivityId, String roomCode);

    /**
     * 考试记录改变cache
     *
     * @param key
     * @param timestamp
     */
    public void addExamRecordChangeCache(String key, Long timestamp);

    /**
     * 获取考试记录score
     *
     * @param key
     */
    public Long getExamRecordChangeCache(String key);
}
