import { SDK_NAME, SDK_VERSION } from '@/common/config'
import { BREADCRUMBCATEGORYS } from '@/common/constant'
import initOptions from '@/common/initOpitons'
import { log } from '@/core'
import { InitOptions, ReportDataType } from '@/types'
import { generateUUID, isEmpty, isWxMiniEnv } from '@/utils'
import { setupReplace } from '@/wx-mini/load'

function init(options: InitOptions = {}) {
  if (!isWxMiniEnv) return
  initOptions(options)
  setupReplace()
}

// 如果是接口正常情况下不取响应体  因为sls中单字段最多只能16k
function beforePushBreadcrumb(breadcrumb, cruBreadcrumbData) {
  if (cruBreadcrumbData.category === BREADCRUMBCATEGORYS.HTTP) {
    const data = cruBreadcrumbData.data as ReportDataType
    if (data.response.status >= 200 && data.response.status < 300) {
      data.response.data = ''
    }
  }
  return cruBreadcrumbData
}

const includeHttpUrlTraceIdRegExp = /apigw/
const maxBreadcrumbs = 20
const enableTraceId = true

type TCallBack = () => void
function manualInit(callback: TCallBack, qa = false) {
  const isQa = wx.getAccountInfoSync().miniProgram.envVersion !== 'release'
  const envInit = qa ? isQa : !isQa
  if (envInit) {
    callback()
  }
}
const miniTrackerId = 'mito-uuid'

function backTrackerId() {
  let uuid = wx.getStorageSync(miniTrackerId)
  if (!isEmpty(uuid)) return uuid
  uuid = generateUUID()
  wx.setStorageSync(miniTrackerId, uuid)
  return uuid
}

export { beforePushBreadcrumb, includeHttpUrlTraceIdRegExp, maxBreadcrumbs, enableTraceId, manualInit, init, SDK_VERSION, SDK_NAME, log, backTrackerId }
