import store from '@/store'
import StoreApi from '@/api/store'
import storage from '@/utils/storage'
import { isWeixinOfficial } from '@/core/platform'
import SettingModel from '@/common/model/Setting'
import WxofficialSettingModel from '@/common/model/wxofficial/Setting'

const CACHE_KEY = 'Store'

// 写入缓存, 到期时间10分钟
const setStorage = data => {
  const expireTime = 10 * 60
  storage.set(CACHE_KEY, data, expireTime)
}

// 获取缓存中的数据
const getStorage = () => {
  return storage.get(CACHE_KEY)
}

// 获取后端接口商城设置 (最新)
const getApiData = () => {
  return new Promise((resolve, reject) => {
    StoreApi.data().then(result => {
      // 初始化商城数据
      initStoreData(result.data)
      resolve(result.data)
    })
  })
}

// 初始化商城数据
const initStoreData = data => {
  // 将商城基本信息写入缓存
  setStorage(data)
  // 设置商城设置缓存
  SettingModel.setStorage(data.setting)
  // 设置全局自定义主题
  SettingModel.setAppTheme()
  // 设置微信公众号链接分享卡片内容(全局)
  if (isWeixinOfficial) {
    WxofficialSettingModel.setGlobalShareCard(false)
  }
  // 设置开启的功能模块
  store.dispatch('SetModules', data.modules)
}

/**
 * 获取商城基础信息
 * 有缓存的情况下返回缓存, 没有缓存从后端api获取
 */
const data = (isCache = true) => {
  return new Promise((resolve, reject) => {
    const cacheData = getStorage()
    if (isCache && cacheData) {
      resolve(cacheData)
    } else {
      getApiData().then(data => {
        resolve(data)
      })
    }
  })
}

// 获取商城基本信息
const storeInfo = () => {
  return new Promise((resolve, reject) => {
    data().then(data => resolve(data.storeInfo))
  })
}

// 获取H5端访问地址
const h5Url = () => {
  return new Promise((resolve, reject) => {
    data().then(data => {
      const h5Url = data.clientData.h5.setting.baseUrl
      resolve(h5Url)
    })
  })
}

// 是否开启分销中心
const isEnabledDealer = () => {
  return new Promise((resolve, reject) => {
    data().then(data => {
      const isEnabledDealer = Boolean(data.dealer.setting.is_open)
      resolve(isEnabledDealer)
    })
  })
}

export default {
  data,
  storeInfo,
  h5Url,
  isEnabledDealer
}