/**
 * 加密配置管理类
 * 统一管理加密相关的配置和策略
 */

// 加密类型枚举
export enum CryptoType {
  TRADITIONAL = 'traditional', // 传统RSA+AES加密
  GM = 'gm'                    // 国密SM算法加密
}

/**
 * 加密配置管理器
 */
export class CryptoConfigManager {
  private static instance: CryptoConfigManager;
  private enabled: boolean;
  private type: CryptoType;

  private constructor() {
    this.loadConfigFromEnv();
  }

  /**
   * 获取单例实例
   */
  public static getInstance(): CryptoConfigManager {
    if (!CryptoConfigManager.instance) {
      CryptoConfigManager.instance = new CryptoConfigManager();
    }
    return CryptoConfigManager.instance;
  }

  /**
   * 从环境变量加载配置
   */
  private loadConfigFromEnv(): void {
    this.enabled = import.meta.env.VITE_APP_CRYPTO_ENABLED === 'true';
    const typeStr = import.meta.env.VITE_APP_CRYPTO_TYPE || 'traditional';

    // 验证加密类型
    switch (typeStr.toLowerCase()) {
      case 'gm':
        this.type = CryptoType.GM;
        break;
      case 'traditional':
      default:
        this.type = CryptoType.TRADITIONAL;
        break;
    }
  }

  /**
   * 是否启用加密
   */
  public isEncryptEnabled(): boolean {
    return this.enabled;
  }

  /**
   * 是否使用国密加密
   */
  public isGmCrypto(): boolean {
    return this.enabled && this.type === CryptoType.GM;
  }
}

/**
 * 获取全局加密配置管理器实例
 */
export function getCryptoConfig(): CryptoConfigManager {
  return CryptoConfigManager.getInstance();
}

/**
 * 便捷方法：是否使用国密
 */
export function isGmCryptoEnabled(): boolean {
  return getCryptoConfig().isGmCrypto();
}
