// 后端API响应的通用格式
export interface ApiResponse<T = any> {
  content: T;
  status: string;
  errorCode: string;
  errorMsg: string;
  traceId: string;
}

// API错误类型
export class ApiError extends Error {
  constructor(
    public errorCode: string,
    public errorMsg: string,
    public traceId: string,
    public ignoreError?: boolean
  ) {
    super(errorMsg);
    this.name = 'ApiError';
    // 确保在多环境/继承链中 instanceof 正常工作
    Object.setPrototypeOf(this, ApiError.prototype);
  }
}

// 成功状态常量
export const API_STATUS = {
  OK: 'OK',
} as const;

// NIM 消息发送错误类型，匹配 V2NIMError 结构
export interface NIMMessageSendErrorDetail {
  /** 可能的详细错误描述 */
  reason?: string;
  /** 原始错误 */
  rawError?: Error;
  /** 请求返回的原始数据 */
  rawData?: string;
  /** 错误发生的时间 */
  timetag?: number;
  /** 命令类型 */
  cmd?: string;
  /** 其他详细信息 */
  [key: string]: any;
}

export class NIMMessageSendError extends Error {
  constructor(
    public code: number,
    public desc: string,
    public detail?: NIMMessageSendErrorDetail
  ) {
    super(desc);
    this.name = 'NIMMessageSendError';
    Object.setPrototypeOf(this, NIMMessageSendError.prototype);
  }

  // 从 V2NIMError 创建 NIMMessageSendError 实例的静态方法
  static fromV2NIMError(error: any): NIMMessageSendError {
    return new NIMMessageSendError(
      error.code || 0,
      error.desc || error.message || 'Unknown error',
      error.detail
    );
  }
}
