package com.sonic.bear.utils;

import com.sonic.common.AppRuntime;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * 统一的 redis key 管理工具类（方便后续的维护和查找）
 *
 * @Author code
 * @Date 2021/9/24
 * @Version 1.0
 */
@Slf4j
@Service
public class RedisKeyUtils {

    @Value("${spring.profiles.active}")
    private String runMode;
    @Autowired
    private AppRuntime appRuntime;

    ///////////////////////////////////////// 综合推荐业务降级 /////////////////////////////////////////

    /**
     * 超时降级次数校验RedisKey
     *
     * @param bizType
     * @return
     */
    public String fallBackTimeOutCountCheckKey(String bizType) {
        if(runMode.equals("test")) {
            return "1001:test:fallback:timeoutCount:" + bizType;
        }
        return "1001:fallback:timeoutCount:" + bizType;
    }

    /**
     * 超时降级的状态
     * @param bizType
     * @return
     */
    public String fallBackKey(String bizType) {
        if(runMode.equals("test")) {
            return "1001:test:fallback:status:" + bizType;
        }
        return "1001:fallback:status:" + bizType;
    }

    /**
     * 创建session时的redis锁（eg: 1001:test:lock:createSession:xxx）
     * @param userId
     * @return
     */
    public String sessionCreateLockKey(Long userId) {
        return appRuntime.buildPrefixKey("lock", "createSession", userId);
    }

    /**
     * 创建session时的redis锁（eg: 1001:test:lock:createSession:xxx）
     * @param userId
     * @return
     */
    public String addAccessLogLockKey(Long userId) {
        return appRuntime.buildPrefixKey("lock", "addAccessLog", userId);
    }

    /**
     * 创建session时的redis锁（eg: 1001:test:session:kickOut:xxx）
     * @param token
     * @return
     */
    public String sessionKickOutKey(String token) {
        return appRuntime.buildPrefixKey("session", "kickOut", token);
    }

    /**
     * 创建session时的redis锁（eg: 1001:test:session:access:xxx）
     * @param userId
     * @return
     */
    public String addAccessLogKey(Long userId) {
        return appRuntime.buildPrefixKey("session", "access", userId);
    }


    /**
     * 用户ID的列表(eg: 1001:test:idCard:genList)
     * @return
     */
    public String idCardGenListKey() {
        return appRuntime.buildPrefixKey("idCard", "genList");
    }

    /**
     * 用户ID的最大值(eg: 1001:test:idCard:maxValue)
     * @return
     */
    public String idCardCounterKey() {
        return appRuntime.buildPrefixKey("idCard", "counter");
    }


}
