/**
 * 设置相关类型定义
 */

// 支付方式
export enum PaymentMethod {
  ALIPAY = 'alipay', // 支付宝
  WECHAT = 'wechat', // 微信支付
  BANK = 'bank' // 银行卡
}

// 收款商户设置
export interface PaymentMerchantSetting {
  id?: string | number
  // 支付宝配置
  alipay?: {
    enabled: boolean
    appId: string
    privateKey: string
    publicKey: string
    notifyUrl?: string
  }
  // 微信支付配置
  wechat?: {
    enabled: boolean
    appId: string
    mchId: string
    apiKey: string
    certPath?: string
    notifyUrl?: string
  }
  // 银行转账配置
  bank?: {
    enabled: boolean
    bankName: string
    accountName: string
    accountNumber: string
    branchName?: string
  }
  updateTime?: string
  updaterName?: string
}

// 开发能力（API Key）
export interface DevelopmentCapability {
  id: string | number
  accountId: string | number
  accountName: string
  // API 密钥
  appKey: string
  appSecret: string // 前端只显示部分
  // 权限范围
  scopes: string[] // 允许访问的 API 范围
  // IP 白名单
  ipWhitelist?: string[]
  // 状态
  status: 'active' | 'disabled'
  // 限流配置
  rateLimit?: {
    requestsPerSecond: number
    requestsPerDay: number
  }
  // 统计信息
  totalCalls?: number // 总调用次数
  todayCalls?: number // 今日调用次数
  lastCallTime?: string // 最后调用时间
  // 时间信息
  createTime: string
  updateTime?: string
  expireTime?: string // 过期时间
}

// 生成 API Key 参数
export interface GenerateApiKeyParams {
  scopes: string[]
  ipWhitelist?: string[]
  expireDays?: number // 有效期天数
  rateLimit?: {
    requestsPerSecond: number
    requestsPerDay: number
  }
}

// 刷新 Secret 响应
export interface RefreshSecretResponse {
  appSecret: string
}

// API 调用日志
export interface ApiCallLog {
  id: string | number
  appKey: string
  apiPath: string // API 路径
  method: string // HTTP 方法
  requestIp: string
  requestTime: string
  responseTime: string
  duration: number // 耗时（ms）
  statusCode: number
  success: boolean
  errorMessage?: string
}

// 系统通知设置
export interface NotificationSetting {
  id?: string | number
  // 邮件通知
  email?: {
    enabled: boolean
    events: string[] // 需要邮件通知的事件
  }
  // 短信通知
  sms?: {
    enabled: boolean
    events: string[]
  }
  // 站内消息
  internal?: {
    enabled: boolean
    events: string[]
  }
  updateTime?: string
}
