/**
 * 支付配置管理 (Payment Configuration)
 * 从环境变量读取支付配置
 * 
 * 作者: 卡若
 * 版本: v4.0
 */

import { AlipayConfig } from './alipay';
import { WechatPayConfig } from './wechat';

// 应用基础配置
export interface AppConfig {
  env: 'development' | 'production';
  name: string;
  url: string;
  currency: 'CNY' | 'USD' | 'EUR';
}

// 完整支付配置
export interface PaymentConfig {
  app: AppConfig;
  alipay: AlipayConfig;
  wechat: WechatPayConfig;
  paypal: {
    enabled: boolean;
    mode: 'sandbox' | 'production';
    clientId: string;
    clientSecret: string;
  };
  stripe: {
    enabled: boolean;
    mode: 'test' | 'production';
    publicKey: string;
    secretKey: string;
    webhookSecret: string;
  };
  usdt: {
    enabled: boolean;
    gatewayType: string;
    apiKey: string;
    ipnSecret: string;
  };
  order: {
    expireMinutes: number;
    tradeSnPrefix: string;
  };
}

/**
 * 获取支付配置
 */
export function getPaymentConfig(): PaymentConfig {
  return {
    app: {
      env: (process.env.NODE_ENV || 'development') as 'development' | 'production',
      name: process.env.APP_NAME || 'Soul创业实验',
      url: process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000',
      currency: (process.env.APP_CURRENCY || 'CNY') as 'CNY',
    },
    alipay: {
      enabled: process.env.ALIPAY_ENABLED === 'true' || true, // 默认启用
      mode: (process.env.ALIPAY_MODE || 'production') as 'production',
      // 支付宝新版接口需要 app_id，如果没有配置则使用 pid（旧版兼容）
      appId: process.env.ALIPAY_APP_ID || process.env.ALIPAY_PID || '2088511801157159',
      pid: process.env.ALIPAY_PID || '2088511801157159',
      sellerEmail: process.env.ALIPAY_SELLER_EMAIL || 'zhengzhiqun@vip.qq.com',
      privateKey: process.env.ALIPAY_PRIVATE_KEY || '',
      publicKey: process.env.ALIPAY_PUBLIC_KEY || '',
      md5Key: process.env.ALIPAY_MD5_KEY || 'lz6ey1h3kl9zqkgtjz3avb5gk37wzbrp',
    },
    wechat: {
      enabled: process.env.WECHAT_ENABLED === 'true' || true, // 默认启用
      mode: (process.env.WECHAT_MODE || 'production') as 'production',
      // 微信支付需要使用绑定了支付功能的服务号AppID
      appId: process.env.WECHAT_APPID || 'wx7c0dbf34ddba300d', // 服务号AppID（已绑定商户号）
      appSecret: process.env.WECHAT_APP_SECRET || 'f865ef18c43dfea6cbe3b1f1aebdb82e',
      serviceAppId: process.env.WECHAT_SERVICE_APPID || 'wx7c0dbf34ddba300d',
      serviceSecret: process.env.WECHAT_SERVICE_SECRET || 'f865ef18c43dfea6cbe3b1f1aebdb82e',
      mchId: process.env.WECHAT_MCH_ID || '1318592501',
      mchKey: process.env.WECHAT_MCH_KEY || 'wx3e31b068be59ddc131b068be59ddc2',
      certPath: process.env.WECHAT_CERT_PATH || '',
      keyPath: process.env.WECHAT_KEY_PATH || '',
    },
    paypal: {
      enabled: process.env.PAYPAL_ENABLED === 'true',
      mode: (process.env.PAYPAL_MODE || 'sandbox') as 'sandbox',
      clientId: process.env.PAYPAL_CLIENT_ID || '',
      clientSecret: process.env.PAYPAL_CLIENT_SECRET || '',
    },
    stripe: {
      enabled: process.env.STRIPE_ENABLED === 'true',
      mode: (process.env.STRIPE_MODE || 'test') as 'test',
      publicKey: process.env.STRIPE_PUBLIC_KEY || '',
      secretKey: process.env.STRIPE_SECRET_KEY || '',
      webhookSecret: process.env.STRIPE_WEBHOOK_SECRET || '',
    },
    usdt: {
      enabled: process.env.USDT_ENABLED === 'true',
      gatewayType: process.env.USDT_GATEWAY_TYPE || 'nowpayments',
      apiKey: process.env.NOWPAYMENTS_API_KEY || '',
      ipnSecret: process.env.NOWPAYMENTS_IPN_SECRET || '',
    },
    order: {
      expireMinutes: parseInt(process.env.ORDER_EXPIRE_MINUTES || '30', 10),
      tradeSnPrefix: process.env.TRADE_SN_PREFIX || 'T',
    },
  };
}

/**
 * 获取回调通知URL
 */
export function getNotifyUrl(gateway: 'alipay' | 'wechat' | 'paypal' | 'stripe'): string {
  const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
  return `${baseUrl}/api/payment/${gateway}/notify`;
}

/**
 * 获取支付成功返回URL
 */
export function getReturnUrl(orderId?: string): string {
  const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
  const url = `${baseUrl}/payment/success`;
  return orderId ? `${url}?orderId=${orderId}` : url;
}
