const config = require('./config.js')

const env = config.env === 'production' ? 'prod' : 'dev' // prod, 生产环境不输出
const oldUrl = []
let flag = false
module.exports = {
  info() {},
  // 生命周期报错警告记录函数

  /**
     * msg 为发出的警告信息
     * lifeName 为发出警告的生命周期名字
     * **/
  warnLife(msg, lifeName) {
    if (env === 'prod') { return false }
    let _flag = true
    const rs = my.getStorageSync({ key: '_pageMsg' })
    if (lifeName === 'app/onHide') {
      flag = true
      return
    }
    if (flag) {
      for (let i = 0; i < oldUrl.length; i++) {
        if (oldUrl[i] === rs.data.pagePath) {
          _flag = false
          break
        }
      }
    }
    if (!_flag) {
      return
    } else {
      oldUrl.push(rs.data.pagePath)
    }
    let logInfo = {
      appName: '',
      appVersion: '',
      pages: [],
    }
    const page = {
      pageName: '',
      path: '',
      open: false,
      logs: [],
    }
    const log = {
      type: '',
      errorType: '',
      name: '',
      message: '',
      custom: '',
    }
    let p = false
    let l = false
    let a = -1

    const res = my.getStorageSync({ key: '__antmove_loginfo' })
    if (res.data !== null) {
      logInfo = res.data
    }

    page.pageName = rs.data.pageName
    page.path = rs.data.pagePath
    log.type = 'life'
    log.name = lifeName
    log.message = msg

    if (res.data !== null) {
      for (let i = 0; i < res.data.pages.length; i++) {
        if (rs.data.pagePath === res.data.pages[i].path) {
          p = true
          a = i
          for (let j = 0; j < res.data.pages[i].logs.length; j++) {
            if (lifeName === res.data.pages[i].logs[j].name) {
              l = true
              if (l) { break }
            }
          }
        }
      }
      if (p && !l) {
        logInfo.pages[a].logs.push(log)
      }
      if (!p && !l) {
        page.logs.push(log)
        logInfo.pages.push(page)
      }
    } else {
      page.logs.push(log)
      logInfo.pages.push(page)
    }
    my.setStorageSync({
      key: '__antmove_loginfo',
      data: logInfo,
    })
    console.warn(msg)
  },

  /**
    *  warn 为api报警的就函数
    *  _desc = {
    *      apiName: 报警的api的名字
    *      errorType: 报警的api警告等级
    *      type： 警告描述
    * }
    *  errorType等级分为:
    *  0 - missing - 不支持该属性
    *  1 - diff - 命名及格式不同
    *  3 - diffType - 类型不同
    *  4 - defaultValue - 默认值不同
    * 5 - wrapComponent - 使用自定义组件代替
    * 6 - diff tagName
    * 7 - equal - 完全支持
    */
  warn(
    msg,
    _desc = {
      apiName: '',
      errorType: '',
      type: '',
    },
  ) {
    if (env === 'prod') { return false }

    let logInfo = {
      appName: '',
      appVersion: '',
      pages: [],
    }
    const page = {
      pageName: '',
      path: '',
      open: '',
      logs: [],
    }
    const log = {
      type: '',
      errorType: '',
      name: '',
      message: '',
      custom: '',
    }
    const res = my.getStorageSync({ key: '__antmove_loginfo' })
    if (res.data !== null) {
      logInfo = res.data
    }

    const rs = my.getStorageSync({ key: '_pageMsg' })
    if (!rs || !rs.data) { return }
    page.pageName = rs.data.pageName
    page.path = rs.data.pagePath
    log.type = _desc.type
    log.name = _desc.apiName
    log.message = msg
    log.errorType = _desc.errorType
    if (!_desc.errorType && _desc.errorType !== 0) {
      log.custom = 'No missing attribute'
    } else if (_desc.errorType === 0) {
      log.custom = '不支持该属性'
    } else if (_desc.errorType === 1) {
      log.custom = '命名及格式不同'
    } else if (_desc.errorType === 2) {
      log.custom = '类型不同'
    } else if (_desc.errorType === 3) {
      log.custom = '默认值不同'
    }
    let p = false
    let l = false
    let a = -1
    if (res.data !== null) {
      for (let i = 0; i < res.data.pages.length; i++) {
        if (rs.data.pagePath === res.data.pages[i].path) {
          p = true
          a = i
          for (let j = 0; j < res.data.pages[i].logs.length; j++) {
            if (_desc.apiName === res.data.pages[i].logs[j].name) {
              l = true
              if (l) { break }
            }
          }
        }
      }
      if (p && !l) {
        logInfo.pages[a].logs.push(log)
      }
      if (!p && !l) {
        page.logs.push(log)
        logInfo.pages.push(page)
      }
    } else {
      page.logs.push(log)
      logInfo.pages.push(page)
    }
    my.setStorageSync({
      key: '__antmove_loginfo',
      data: logInfo,
    })
    console.warn(msg)
  },
  error() {},
}
