export enum IUploadFlag {
  unFlag,
  flagFailed,
  flagSuccess
}

export enum ILogLevel {
  verbose = 1,
  debug,
  info,
  waring,
  error
}

export enum IUploadStrategy {
  onlyWifi = 1,
  all = 2
}

export enum IUrgency {
  realTime = 1,
  allowDelay
}

export interface MonitorRecord {
  id?: any, // id:主键
  date: string, // date:埋点产生的时间
  uploadFlag: IUploadFlag,
  uploadCount: number,
  content: any,
  realTime: boolean,
  strategy: IUploadStrategy,
  urgency: IUrgency
}

export interface LoggerRecord {
  id?: any, // id:主键
  date: string, // date:埋点产生的时间
  uploadFlag: IUploadFlag,
  uploadCount: number,
  level: ILogLevel,
  content: any,
  strategy: IUploadStrategy,
}


/**
 * 降级限流配置
 */
export interface ISlsLimit {
  isLimited?: boolean, // 限流
  msg?: string,
  limitTime?: number,
  limitCount?: number,
  reqCount?: number,
  lastReqTime?: number
}

export interface PNSUploadMonitorInterface {
  uploadMonitors(records: MonitorRecord[]): Promise<any>
}

export interface PNSUploadLoggerInterface {
  uploadLogs(records: LoggerRecord[]): Promise<any>
}

export interface ISecretInfo {
  phoneNumber: string,
  accessCode?: string,
  jwtToken?: string,
  accessToken?: string,
  spToken?: string
}

export interface ISDkInfo {
  isSuccess: boolean,
  msg: string,
  traceId: string,
  netType?: string,
  requestId: string,
  sessionId: string,
  authSdkCode: number,
}

export interface IUserInfo {
  startTime: Date,
  endTime: Date,
  requestId: string,
  sessionId: string,
  authSdkCode: number,
  carrierTraceId: string,
  carrierSdkCode: number,
  topTraceId: string
  isSuccess: boolean,
  wholeMS: number,
  failRet: string
}

export interface IExtraInfo {
  sdkVersion: string,
  osName: string,
  deviceBrand: string,
  deviceName: string,
  monitorVersion: string,
  browser: string,
  browserVersion: string
  carrierSdkVersion: string
}

export interface IClientInfo extends IExtraInfo{
  traceId: string,
  operatorId: number,
  vendorKey: string
  uniqueId: string,
  url: string,
  domain: string
}

export interface IServerInfo {
  isSuccess: boolean ,
  failRet?: string,
  topTraceId?: string
}

export interface ICarrierInfo {
  carrierTraceId: string,
  carrierSdkCode: number,
  carrierRespCode?: number
}





