package com.huimv.employment.common.constant;

/**
 * Redis Key 前缀与组装方法。
 * <p>
 * 命名规范（与技术方案 §7.3 一致）：{@code fe:{业务}:{标识}}
 * </p>
 * <p>
 * 短信相关 Key 说明：
 * <ul>
 *   <li>{@link #SMS_CODE} — 验证码存储，TTL 默认 5 分钟</li>
 *   <li>{@link #SMS_SEND_COOLDOWN} — 发送冷却标记，TTL 默认 60 秒</li>
 * </ul>
 * Key 中使用手机号 SHA-256 哈希（{@link com.huimv.employment.common.util.MobileUtils#hash}），
 * 而非明文手机号，避免 Redis 中泄露敏感信息。
 * </p>
 */
public final class RedisKeys {

    private RedisKeys() {
    }

    /** 短信验证码 Key 前缀，完整 Key：fe:sms:{mobileHash} */
    public static final String SMS_CODE = "fe:sms:";

    /** 短信发送冷却 Key 前缀，完整 Key：fe:sms:cd:{mobileHash} */
    public static final String SMS_SEND_COOLDOWN = "fe:sms:cd:";

    /** 短信验证码校验失败计数 Key 前缀，完整 Key：fe:sms:attempts:{mobileHash} */
    public static final String SMS_VERIFY_ATTEMPTS = "fe:sms:attempts:";

    /** 账密登录失败计数 Key 前缀，完整 Key：fe:login:fail:{accountKey} */
    public static final String LOGIN_FAIL = "fe:login:fail:";

    /**
     * 组装验证码 Redis Key。
     *
     * @param mobileHash 手机号 SHA-256 哈希（{@link com.huimv.employment.common.util.MobileUtils#hash}）
     * @return 如 fe:sms:a1b2c3...
     */
    public static String smsCodeKey(String mobileHash) {
        return SMS_CODE + mobileHash;
    }

    /**
     * 组装发送冷却 Redis Key。
     *
     * @param mobileHash 手机号 SHA-256 哈希
     * @return 如 fe:sms:cd:a1b2c3...
     */
    public static String smsCooldownKey(String mobileHash) {
        return SMS_SEND_COOLDOWN + mobileHash;
    }

    /**
     * 组装验证码校验失败计数 Redis Key。
     */
    public static String smsVerifyAttemptKey(String mobileHash) {
        return SMS_VERIFY_ATTEMPTS + mobileHash;
    }

    /**
     * 组装账密登录失败计数 Redis Key。
     *
     * @param accountKey 规范化后的用户名或手机号哈希
     */
    public static String loginFailKey(String accountKey) {
        return LOGIN_FAIL + accountKey;
    }
}
