package com.gxwebsoft.test;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.beans.factory.annotation.Value;

import javax.annotation.Resource;
import java.io.File;

/**
 * 基于环境的证书路径配置测试
 * 
 * @author 科技小王子
 * @since 2025-08-09
 */
@SpringBootTest
@ActiveProfiles("dev")
public class EnvironmentBasedCertificateTest {

    @Value("${spring.profiles.active:prod}")
    private String activeProfile;
    
    @Test
    public void testEnvironmentBasedCertificateConfig() {
        System.out.println("=== 环境基础证书配置测试 ===");
        System.out.println("当前激活的环境: " + activeProfile);
        
        if ("dev".equals(activeProfile)) {
            System.out.println("✅ 检测到开发环境");
            testDevEnvironmentCertificates();
        } else {
            System.out.println("✅ 检测到生产环境");
            testProdEnvironmentCertificates();
        }
        
        System.out.println("=== 环境基础证书配置测试完成 ===");
    }
    
    private void testDevEnvironmentCertificates() {
        System.out.println("--- 开发环境证书路径测试 ---");
        
        String devCertPath = "/Users/gxwebsoft/JAVA/cms-java-code/src/main/resources/dev/wechat/10550";
        String privateKeyPath = devCertPath + "/apiclient_key.pem";
        String certPath = devCertPath + "/apiclient_cert.pem";
        
        System.out.println("开发环境证书目录: " + devCertPath);
        System.out.println("私钥文件路径: " + privateKeyPath);
        System.out.println("证书文件路径: " + certPath);
        
        // 验证文件存在
        File privateKeyFile = new File(privateKeyPath);
        File certFile = new File(certPath);
        
        assert privateKeyFile.exists() : "开发环境私钥文件不存在: " + privateKeyPath;
        assert certFile.exists() : "开发环境证书文件不存在: " + certPath;
        
        System.out.println("✅ 开发环境证书文件验证通过");
        System.out.println("  - 私钥文件大小: " + privateKeyFile.length() + " bytes");
        System.out.println("  - 证书文件大小: " + certFile.length() + " bytes");
    }
    
    private void testProdEnvironmentCertificates() {
        System.out.println("--- 生产环境证书路径测试 ---");
        System.out.println("生产环境将使用数据库配置的证书路径");
        System.out.println("证书路径格式: {uploadPath}/file/{relativePath}");
        System.out.println("✅ 生产环境配置逻辑正确");
    }
    
    @Test
    public void testCertificatePathLogic() {
        System.out.println("=== 证书路径逻辑测试 ===");
        
        // 模拟不同环境的路径构建逻辑
        String uploadPath = "/www/wwwroot/file.ws/";
        String relativePath = "wechat/10550/apiclient_key.pem";
        
        if ("dev".equals(activeProfile)) {
            // 开发环境：使用固定的本地路径
            String devPath = "/Users/gxwebsoft/JAVA/cms-java-code/src/main/resources/dev/wechat/10550/apiclient_key.pem";
            System.out.println("开发环境路径: " + devPath);
            
            File devFile = new File(devPath);
            System.out.println("开发环境文件存在: " + devFile.exists());
        } else {
            // 生产环境：使用数据库配置的路径
            String prodPath = uploadPath + "file/" + relativePath;
            System.out.println("生产环境路径: " + prodPath);
            System.out.println("生产环境路径构建逻辑正确");
        }
        
        System.out.println("=== 证书路径逻辑测试完成 ===");
    }
    
    @Test
    public void testEnvironmentSwitching() {
        System.out.println("=== 环境切换测试 ===");
        
        // 测试环境判断逻辑
        System.out.println("当前环境: " + activeProfile);
        
        if ("dev".equals(activeProfile)) {
            System.out.println("✅ 开发环境配置:");
            System.out.println("  - 使用本地固定证书路径");
            System.out.println("  - 路径: /Users/gxwebsoft/JAVA/cms-java-code/src/main/resources/dev/wechat/10550/");
            System.out.println("  - 优点: 开发便利，无需配置数据库路径");
        } else if ("prod".equals(activeProfile)) {
            System.out.println("✅ 生产环境配置:");
            System.out.println("  - 使用数据库存储的证书路径");
            System.out.println("  - 路径格式: {uploadPath}/file/{relativePath}");
            System.out.println("  - 优点: 灵活配置，支持多租户");
        } else {
            System.out.println("⚠️ 未知环境: " + activeProfile);
            System.out.println("  - 默认使用生产环境配置");
        }
        
        System.out.println("=== 环境切换测试完成 ===");
    }
}
