import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import Vant from 'vant'
import { Lazyload } from 'vant'
import commMixin from '@/mixin/comm'
import 'vant/lib/index.css'
import { prettyPrint } from './filters'
import loggerPlugin from './plugin/loggerPlugin'

// import VueDragResize from 'vue-drag-resize'
// Vue.component('vue-drag-resize', VueDragResize)
Vue.use(Vant)
Vue.use(Lazyload)
Vue.use(loggerPlugin, store)

Vue.filter('prettyPrint', prettyPrint)
Vue.config.productionTip = false

Vue.config.errorHandler = function (error, vm, info) {
  console.error('Error message:' + error.message, 'Error stack:' + error.stack)
}

// function getObjToArrayBufferDoLength(obj) {
//   // 将对象序列化为 JSON 字符串
//   const json = JSON.stringify(obj)
//   // 创建一个新的 TextEncoder 对象
//   const encoder = new TextEncoder()
//   // 将 JSON 字符串编码为 Uint8Array
//   const data = encoder.encode(json)
//   // 创建一个新的 ArrayBuffer,大小为数据长度
//   const buffer = new ArrayBuffer(data.length)
//   // 获取 ArrayBuffer 的视图(Uint8Array)
//   const view = new Uint8Array(buffer)
//   // 将数据复制到 ArrayBuffer 中
//   view.set(data)
//   return view.byteLength
// }

Vue.mixin(commMixin)
const app = new Vue({
  router,
  store,
  created() {
    this.setIsApp()
    setTimeout(() => {
      if (!this.getIsApp) {
        rewriteXHR()
      }
    }, 0)
  },
  methods: {
    setIsApp() {
      let isApp = false
      try {
        isApp = webf ? true : false
      } catch (error) {
        isApp = false
      }
      this.$store.commit('setIsApp', isApp)
    }
  },
  render: h => h(App)
}).$mount('#app')

function rewriteXHR() {
  // 保存原始的 XMLHttpRequest 构造函数
  let OriginalXHR = window.XMLHttpRequest
  // 创建新的 XMLHttpRequest 构造函数,扩展了原始的构造函数
  function CustomXHR(app) {
    let xhr = new OriginalXHR()
    let sendDate = 0
    xhr.addEventListener('loadstart', function (event) {
      sendDate = Date.now()
    })
    xhr.addEventListener('load', function (event) {
      const responseURL = xhr.response.url || xhr.responseURL
      const response = xhr.response.body || xhr.response
      try {
        console.netwokrLog({
          name: responseURL.split('/').pop(),
          status: xhr.status,
          statusText: xhr.statusText,
          response: response,
          responseURL: responseURL,
          size: 0,
          time: Date.now() - sendDate
        })
      } catch (error) {
        console.log('error:', error)
      }
    })
    xhr.addEventListener('error', function (event) {
      console.log('error:', event)
    })
    return xhr
  }
  // 重写全局的 XMLHttpRequest 构造函数
  window.XMLHttpRequest = CustomXHR
}

// new Vue({
//     router,
//     store,
//     render: h => h(App)
// }).$mount(document.body)