import { storageUtil } from 'press-ui/common/utils/storage';
import { sliceObject } from 't-comm/es/base/object/slice';

import { DETAIL_CACHE_KEY_LIST, MAX_CACHE_NUMBER } from './config';

import type { ISiteParams } from './types';


export { DETAIL_CACHE_KEY_LIST };


export function setSiteDetailCache({
  siteId,
  siteInfo,
  isTestEnv,
}: ISiteParams) {
  if (!siteId || !siteInfo) return;

  const siteKey = siteId;

  let originInfo: Record<string, any> = {};
  const storageKey = isTestEnv ? DETAIL_CACHE_KEY_LIST.SITE_TEST : DETAIL_CACHE_KEY_LIST.SITE;

  try {
    originInfo = JSON.parse(storageUtil.get(storageKey));
  } catch (err) {
    originInfo = {};
  }

  storageUtil.set(storageKey, JSON.stringify({
    ...sliceObject(originInfo || {}, MAX_CACHE_NUMBER),
    [siteKey]: siteInfo,
  }));
}


export function getSiteDetailCache({
  siteId,
  isTestEnv,
}: Pick<ISiteParams, 'siteId' | 'isTestEnv'>) {
  if (!siteId) {
    return {};
  }

  const siteKey = siteId;
  const storageKey = isTestEnv ? DETAIL_CACHE_KEY_LIST.SITE_TEST : DETAIL_CACHE_KEY_LIST.SITE;

  const str = storageUtil.get(storageKey);
  let info = {};
  try {
    info =  JSON.parse(str)[siteKey];
  } catch (err) {
    info = {};
  }
  return info;
}
