import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
//import './assets/theme/theme-green/index.css'
import VueRouter from 'vue-router'
import store from './vuex/store'
import Vuex from 'vuex'
import axios from 'axios'
import rout from './routes'
import Mock from './mock'
import i18n from './lang'
import 'font-awesome/css/font-awesome.min.css'

import * as socketApi from './api/socket'
import '@/styles/index.scss'


//定义一个全局过滤器实现日期格式化
Vue.filter('datefmt',function(input,fmtstring){

    return moment(input).format(fmtstring)

});

// 注册websocket组件到VUE
Vue.prototype.socketApi = socketApi

Vue.config.productionTip = false
Mock.bootstrap();
Vue.use(ElementUI)
Vue.use(VueRouter)
Vue.use(Vuex)
Vue.prototype.$axios = axios;

//NProgress.configure({ showSpinner: false });
// console.log("mainjs:");
// console.log(rout.routes);
const router = new VueRouter({
    routes:rout.routes
});
Vue.prototype.$rout =router;

//本地存储系统初始化的router路由,用来处理用户退出后,把路由数据初始化
sessionStorage.setItem('sysMenu', JSON.stringify(rout.routes));

router.beforeEach((to, from, next) => {
  //NProgress.start();
  if (to.path == '/login') {
    sessionStorage.removeItem('user');
    sessionStorage.removeItem('menu');
    sessionStorage.removeItem('token');
  }
  let user = JSON.parse(sessionStorage.getItem('user'));
  if(sessionStorage.getItem('token')){
      axios.defaults.headers.common['Authorization'] = sessionStorage.getItem('token');
  }
  if (!user && to.path != '/login' && !sessionStorage.getItem('menu') && !sessionStorage.getItem('token')) {
    next({ path: '/login' })
  } else {
    next()
  }
});

const message = Vue.prototype.$message;
axios.defaults.baseURL = '/api';
axios.interceptors.response.use(
    res => {
        //对响应数据做些事
        if (res.data && res.status!==200) {
            message({
                //  饿了么的消息弹窗组件,类似toast
                showClose: true,
                message: 'res.data.error.message.message ? res.data.error.message.message : res.data.error.message',
                type: "error"
            });
            return Promise.reject(res.data.error.message);
        }
        return res;
    },
    error => {
        // 用户登录的时候会拿到一个基础信息,比如用户名,token,过期时间戳
        // 直接丢sessionStorage
        if (!sessionStorage.getItem("token")) {
            // 若是接口访问的时候没有发现有鉴权的基础信息,直接返回登录页
            router.push({
                path: "/login"
            });
        } else {

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 401) {
                message({
                    //  饿了么的消息弹窗组件
                    message: '授权超时,或访问未授权,请重新登录',
                    type: "error"
                });
            }

            // 下面是接口回调的satus ,因为我做了一些错误页面,所以都会指向对应的报错页面
            if (error.response.status === 403) {
                router.push({
                    path: "/error/403"
                });
            }
            if (error.response.status === 500) {
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
                });
                // router.push({
                //     path: "/error/500"
                // });
            }
            if (error.response.status === 502) {
                router.push({
                    path: "/error/502"
                });
            }
            if (error.response.status === 404) {
                message({
                    //  饿了么的消息弹窗组件
                    message: error.message,
                    type: "error"
                });
            }
        }
        // 返回 response 里的错误信息
        let errorInfo =  error.response ? error.response.statusText : (error.data.error ? error.data.error.message : error.message);
        return Promise.reject(errorInfo);
    }
);


//router.afterEach(transition => {
//NProgress.done();
//});

let vue = new Vue({
  //el: '#app',
  //template: '<App/>',
  router,
  store,
  i18n,
  //components: { App }
  render: h => h(App)
}).$mount('#app')