package com.yimeng.okr.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;

import jakarta.annotation.PostConstruct;

/**
 * 数据库加密配置 — 生产环境引导。
 *
 * 当环境变量 DB_ENCRYPT_KEY 存在时，提示当前使用的是明文 SQLite，
 * 建议切换到 SQLCipher 以获得静态数据加密。
 *
 * SQLCipher 启用步骤：
 * 1. pom.xml 中取消 sqlcipher-jdbc 依赖注释
 * 2. application-prod.yml 中切换 datasource 配置：
 *    url: jdbc:sqlcipher:./data/okr-performance.db?key=${DB_ENCRYPT_KEY}
 *    driver-class-name: net.zetetic.sqlcipher.jdbc.SQLCipherDriver
 * 3. 设置环境变量 DB_ENCRYPT_KEY（至少 32 字符随机密钥）
 * 4. 首次启动会自动创建加密数据库（如已有明文 .db 需先迁移）
 */
@Slf4j
@Configuration
@ConditionalOnProperty(name = "app.db.encryption-warning", havingValue = "true", matchIfMissing = true)
public class DatabaseEncryptionConfig {

    @PostConstruct
    public void checkEncryption() {
        String encryptKey = System.getenv("DB_ENCRYPT_KEY");
        if (encryptKey != null && !encryptKey.isEmpty()) {
            log.info("DB_ENCRYPT_KEY detected. If you have enabled SQLCipher, "
                    + "the database is encrypted at rest with AES-256.");
        } else {
            log.warn("==============================================");
            log.warn("  SECURITY: Database encryption is NOT enabled.");
            log.warn("  The .db file stores all performance data");
            log.warn("  in PLAINTEXT and is readable if copied.");
            log.warn("  Set DB_ENCRYPT_KEY env var and enable");
            log.warn("  SQLCipher in pom.xml for production use.");
            log.warn("==============================================");
        }
    }
}
