class ApiCache {
  public apiCacheMap = new Map();

  public setCacheMap = (key: string, data: any, timeout: number = 1 * 60 * 60 * 1000) => {
    this.apiCacheMap.set(key, {
      data,
      timeout,
      startTime: (new Date()).getTime(),
    });
  }

  public getDataFromCache = (key: string) => {
    const cacheData = this.apiCacheMap.get(key);

    if (!cacheData) return null;

    const { data, timeout, startTime } = cacheData;
    const currentTime = (new Date()).getTime();

    if ((currentTime - startTime) > timeout) {
      this.deleteDataFromCache(key);
      return null;
    }
    return data;
  }

  public deleteDataFromCache = (key: string) => {
    return this.apiCacheMap.delete(key);
  }
}

export const apiCache = new ApiCache();