package com.seer.teach.common.cache;

import com.seer.teach.common.cache.dto.UserStudyStatusDTO;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Map;

/**
 * 用户学习状态缓存 Service 层
 *
 * 封装 UserStudyStatusCache，提供清晰的业务语义接口：
 *  - startStudy：开始学习并记录状态
 *  - updateStudy：更新当前学习进度
 *  - finishStudy：学习结束，移除状态
 *  - getStudyStatus：获取当前学习状态
 *  - isStudying：是否正在学习
 *  - getAllStudying：获取所有用户学习状态
 *
 * @author Captain
 * @since 2025-10-12
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class UserStudyStatusCacheService {

    private final UserStudyStatusCache userStudyStatusCache;

    /** 标记用户开始学习（存入状态） */
    public void startStudy(Integer userId, UserStudyStatusDTO status) {
        userStudyStatusCache.put(userId, status);
    }

    /** 更新用户学习状态 */
    public void updateStudy(Integer userId, UserStudyStatusDTO status) {
        userStudyStatusCache.put(userId, status);
    }

    /** 获取用户学习状态 */
    public UserStudyStatusDTO getStudyStatus(Integer userId) {
        return userStudyStatusCache.get(userId);
    }

    /** 判断用户是否正在学习 */
    public boolean isStudying(Integer userId) {
        return userStudyStatusCache.exists(userId);
    }

    /** 学习结束，移除状态 */
    public void finishStudy(Integer userId) {
        userStudyStatusCache.remove(userId);
    }

    /** 获取所有学习状态 */
    public Map<Integer, UserStudyStatusDTO> getAllStudying() {
        return userStudyStatusCache.getAll();
    }

    /** 清空所有学习状态 */
    public void clearAll() {
        userStudyStatusCache.clearAll();
    }
}
