import request from '../api'
import store from '../store'
import { Message } from 'element-ui'

const dict = {
  url: "/api/dictionary/queryValsByCodeList",
  loading: [],
  resolves: [],
  getStorage() {
    const dicts = JSON.parse(localStorage.getItem('dicts') || null)
    return dicts?.data || dicts || [];
  },
  setUrl(v) {
    this.url = v
  },
  getData(codeList) {
    codeList = [codeList].flat().filter(Boolean).toString()
    return request.post(this.url, null, {
      withoutToken: true, params: {codeList}
    }).then(res => res?.data && this.setStorage(res.data))
  },
  load(...code) {
    return new Promise(resolve => {
      this.resolves.push(resolve)
      if (this.loading.length == 2) {
        const [timer, codes] = this.loading;
        clearTimeout(timer)
        code = Array.from(new Set([codes, code].flat()))
      }
      const timer = setTimeout(() => {
        this.getData(code).then(() => Promise.all(this.resolves.map(e => e())).then(() => this.resolves = []))
      }, 500)
      this.loading = [timer, code]
    })
  },
  setStorage(data) {
    let ds = this.getStorage()
    data.map(p => {
      if (ds.some(d => d.key == p.key)) {
        const index = ds.findIndex(d => d.key == p.key)
        ds.splice(index, 1, p)
      } else {
        ds.push(p)
      }
    })
    localStorage.setItem("dicts", JSON.stringify([ds].flat()))
  },
  getDict(key) {
    let dict = this.getStorage().find(e => e.key == key)
    !dict && console.warn("字典%s缺少加载...", key)
    return dict ? dict.values : []
  },
  getValue(key, label) {
    let dict = this.getDict(key)
    if (dict) {
      let item = dict.find(v => v.dictName == label)
      return item ? item.dictValue : label
    } else return label
  },
  getLabel(key, value) {
    let dict = this.getDict(key)
    if (dict) {
      let item = dict.find(v => v.dictValue == value)
      return item ? item.dictName : value
    } else return value
  },
  getColor(key, value) {
    let dict = this.getDict(key)
    if (dict) {
      let item = dict.find(v => v.dictValue == value)
      return item ? item.dictColor : value
    } else return value
  },
}

const dateUtil = {
  timestampToTime(timestamp) {
    // 时间戳为10位需*1000，时间戳为13位不需乘1000
    let date = new Date(timestamp);
    let Y = date.getFullYear() + "-";
    let M =
      (date.getMonth() + 1 < 10
        ? "0" + (date.getMonth() + 1)
        : date.getMonth() + 1) + "-";
        let D = (date.getDate() < 10 ? "0" + date.getDate() : date.getDate()) + " ";
        let h = date.getHours() + ":";
        let m = date.getMinutes() + ":";
        let s = date.getSeconds();
    return Y + M + D + h + m + s;
  }
}

const userCheck = (mallId) => {
  return new Promise((resolve, reject) => {
    store.dispatch('getUserInfo').then(res => {
      if (res.flag != 1) {
        Message.error('您的账号未激活或已失效，请激活后使用')
        store.commit('setActiveDlgShow', true)
        reject('您的账号未激活或已失效，请激活后使用')
        return false
      }
      let tempMallId = mallId
      if (!tempMallId) {
        tempMallId = store.state.mallId
      }
      if (res.type != 4 && tempMallId != store.state.userInfo.mallId) {
        Message.error('您当前登录的卖家中心店铺与会员绑定店铺不一致')
        reject('您当前登录的卖家中心店铺与会员绑定店铺不一致')
        return false
      }

      resolve(res.data)
    })
  })
}

export default {
  dict,
  dateUtil,
  userCheck
}


