/**
 * 应用配置
 * 
 * 环境变量说明：
 * - BACKEND_PORT: 后端服务端口，默认 3001
 * - NODE_ENV: 运行环境 (development | production | uat)
 * - API_PREFIX: API 路由前缀，默认 /api/v1
 * - DATABASE_URL: 数据库连接字符串
 * - REDIS_HOST, REDIS_PORT, REDIS_PASSWORD: Redis 配置
 * - JWT_SECRET, JWT_ACCESS_TTL, JWT_REFRESH_TTL: JWT 配置（详见 docs/standards/09-iam-security.md §2.2）
 * - CORS_ORIGIN: 允许的跨域来源，多个用逗号分隔
 *   示例: CORS_ORIGIN=https://example.com,https://www.example.com
 */
export default () => ({
  // 服务端口
  port: parseInt(process.env.BACKEND_PORT || process.env.PORT || '3001', 10),
  
  // 运行环境
  nodeEnv: process.env.NODE_ENV || 'development',
  
  // API 路由前缀
  apiPrefix: process.env.API_PREFIX || '/api/v1',
  
  // 数据库配置
  database: {
    url: process.env.DATABASE_URL,
  },
  
  // Redis 配置
  redis: {
    host: process.env.REDIS_HOST || 'localhost',
    port: parseInt(process.env.REDIS_PORT || '6379', 10),
    password: process.env.REDIS_PASSWORD,
  },
  
  // JWT 配置
  // 规则对齐（09-iam-security.md §2.2）：
  // Access 30d、Refresh 30d，payload 仅 { sub, jti, exp }，权限/DataScope 走 Redis 5min 缓存
  // 撤权 SLA 不受 access TTL 影响（黑名单 + active_jtis 即时生效）。
  jwt: {
    secret: process.env.JWT_SECRET || 'change-me-in-production',
    accessTtl: process.env.JWT_ACCESS_TTL || '30d',
    refreshTtl: process.env.JWT_REFRESH_TTL || '30d',
  },

  // 登录限流（@nestjs/throttler，规则 §2.3：30s ≤ 5 次）
  throttler: {
    ttlMs: parseInt(process.env.AUTH_THROTTLER_TTL_MS || '30000', 10),
    limit: parseInt(process.env.AUTH_THROTTLER_LIMIT || '5', 10),
  },


  // Temporal 工作流配置
  temporal: {
    address: process.env.TEMPORAL_ADDRESS || 'localhost:7233',
    namespace: process.env.TEMPORAL_NAMESPACE || 'default',
    taskQueue: process.env.TEMPORAL_TASK_QUEUE || 'ffoa-task-queue',
  },
  
  // S3 存储配置
  s3: {
    endpoint: process.env.S3_ENDPOINT
      || (process.env.MINIO_ENDPOINT
        ? `${process.env.MINIO_USE_SSL === 'true' ? 'https' : 'http'}://${process.env.MINIO_ENDPOINT}:${process.env.MINIO_PORT || '9000'}`
        : undefined),
    accessKeyId: process.env.S3_ACCESS_KEY || process.env.MINIO_ACCESS_KEY || process.env.MINIO_ROOT_USER,
    secretAccessKey: process.env.S3_SECRET_KEY || process.env.MINIO_SECRET_KEY || process.env.MINIO_ROOT_PASSWORD,
    bucket: process.env.S3_BUCKET || process.env.MINIO_BUCKET || process.env.MINIO_BUCKET_NAME || 'ffoa-attachments',
    region: process.env.S3_REGION || 'us-east-1',
  },
  
  // SMTP 邮件配置
  smtp: {
    host: process.env.SMTP_HOST,
    port: parseInt(process.env.SMTP_PORT || '587', 10),
    secure: process.env.SMTP_SECURE === 'true',
    auth: {
      user: process.env.SMTP_USER,
      pass: process.env.SMTP_PASSWORD,
    },
    from: process.env.SMTP_FROM || 'FF AI Workspace <noreply@example.com>',
  },
  
  /**
   * CORS 跨域配置
   * 
   * 环境变量: CORS_ORIGIN (单数，与 .env 文件保持一致)
   * 格式: 多个域名用逗号分隔，不要有空格
   * 
   * 示例:
   *   CORS_ORIGIN=https://ffworkspace.test.faradayfuture.com,https://www.ffworkspace.test.faradayfuture.com
   * 
   * 注意: 
   *   - 开发环境 (NODE_ENV=development) 会忽略此配置，允许所有来源
   *   - 生产环境必须正确配置，否则前端请求会被 CORS 阻止
   */
  cors: {
    origins: (process.env.CORS_ORIGIN || 'http://localhost:3000').split(','),
  },
  
  // 品牌配置（多品牌部署时通过环境变量覆盖）
  brand: {
    appName: process.env.APP_NAME || 'FF AI Workspace',
    emailFooter: process.env.SYSTEM_EMAIL_FOOTER || '此邮件由 FF AI Workspace 系统自动发送',
    geocodingUserAgent: process.env.GEOCODING_USER_AGENT || 'FFAIWorkspace-SiteAttendance/1.0',
    initAdminEmail: process.env.INIT_ADMIN_EMAIL || 'itadmin@ff.com',
  },

});
