import { defineStore } from 'pinia'
import { store } from '../index'

interface RequestState {
  loadingMap: {
    [key: string]: number
  }
  cachedRequestList: []
}

export const useRequestStore = defineStore('request', {
  state: (): RequestState => {
    return {
      loadingMap: {},
      cachedRequestList: []
    }
  },
  getters: {
    getRequestList(): string {
      return this.cachedRequestList
    }
  },
  actions: {
    setLoadingMap(value: object) {
      this.loadingMap = value
    },
    resetLoadingMap() {
      for (const key in this.loadingMap) {
        this.loadingMap[key] = 0
      }
    },
    addLoading(key: string) {
      if (Object.prototype.hasOwnProperty.call(this.loadingMap, key)) {
        const map = this.loadingMap
        map[key] += 1
        this.loadingMap = map
      } else {
        const nMap = {}
        nMap[key] = 1
        this.loadingMap = nMap
      }
    },
    reduceLoading(key: string) {
      if (this.loadingMap) {
        const map = this.loadingMap
        map[key] -= 1
        this.loadingMap = map
      }
    },
    addCacheRequest(fun) {
      this.cachedRequestList.push(fun)
    },
    cleanCacheRequest() {
      this.cachedRequestList = []
    }
  }
})

export const useRequestStoreWithOut = () => {
  return useRequestStore(store)
}
