import http from '../api'
import qs from "qs";
import Vue from 'vue';
import Vuex from 'vuex';
import { vuexOidcCreateStoreModule } from 'vuex-oidc';
import { GetCommonPms } from "../assets/js/CommonPms.js";
import oidcSettings from "../utils/oidcSettings";
import any from './modules/any';
import bill from './modules/bill';
import more from './modules/more';
import token from './modules/token';


Vue.use(Vuex)

const oidc_config = JSON.parse(process.env.VUE_APP_OIDC_CONFIG);

async function getToken(access_token, appid) {
  let pms = {
    client_id: oidc_config.client_id,
    client_secret: oidc_config.client_secret,
    grant_type: "application",
    scope:
      "workapps.client openid api.workapps.user api.workapps.org api.workapps.open",
    app_register_id: appid,
    token: access_token
  };
  let commonPms = GetCommonPms();
  let url = `${oidc_config.authority}/connect/token?${commonPms}`;
  await http
    .post(url, qs.stringify(pms))
    .then(
      res => {
        if (res.status == 200) {
          const accessToken = res.data.access_token;
          localStorage.setItem("token", accessToken);
        } else {
          console.log('res=', res);
        }
      },
      err => {
        console.log("789err=", err);
        // window.location.href = '/callback.html?err=' + err.response.data.error_description;
      }
    )
    .catch(err => {
      console.log("111err=", err);
      // window.location.href = '/callback.html?err=' + err.response.data.error_description;
    });
}

export default new Vuex.Store({
  modules: {
    bill,
    token,
    any,
    more,
    oidc: vuexOidcCreateStoreModule(oidcSettings,
      {
        isAuthenticatedBy: 'access_token',
        dispatchEventsOnWindow: true
      }, {
      userLoaded: async (user) => {
        const appid = localStorage.getItem('appid');
        console.log('user.access_token=',user.access_token);
        await getToken(user.access_token, appid);
      }
    })
  }
});