package com.lesingle.edu.common.task;

import com.lesingle.edu.common.util.RsaEncryptionUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * RSA 密钥定时轮换任务
 * 每月自动更换 RSA 密钥对，增强安全性
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class RsaKeyRotationTask {

    private final RsaEncryptionUtil rsaEncryptionUtil;

    /**
     * 每月 1 日凌晨 2 点自动更换 RSA 密钥
     * cron 表达式: 秒 分 时 日 月 周
     */
    @Scheduled(cron = "0 0 2 1 * ?")
    public void rotateRsaKey() {
        try {
            log.info("开始执行 RSA 密钥定时更换任务");
            long oldVersion = rsaEncryptionUtil.getKeyVersion();
            rsaEncryptionUtil.generateNewKeyPair();
            long newVersion = rsaEncryptionUtil.getKeyVersion();
            log.info("RSA 密钥定时更换任务执行完成，版本: {} -> {}", oldVersion, newVersion);
        } catch (Exception e) {
            log.error("RSA 密钥定时更换任务执行失败", e);
        }
    }
}
