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 { IChildParams } from './types';

export { DETAIL_CACHE_KEY_LIST };


function getChildKey({
  siteId,
  parentId,
  childId,
}: Pick<IChildParams, 'childId' | 'parentId' | 'siteId'>) {
  return `${siteId}_${parentId}_${childId}`;
}

export function setChildDetailCache({
  siteId,
  parentId,
  childId,
  childInfo,
  isTestEnv,
}: IChildParams) {
  if (!siteId || !parentId || !childId || !childInfo) return;

  const childKey = getChildKey({
    siteId,
    parentId,
    childId,
  });

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

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

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


export function getChildDetailCache({
  siteId,
  parentId,
  childId,
  isTestEnv,
}: Pick<IChildParams, 'siteId' | 'parentId' | 'childId' | 'isTestEnv'>) {
  if (!siteId || !parentId || !childId) {
    return {};
  }

  const childKey = getChildKey({
    siteId,
    parentId,
    childId,
  });

  const storageKey = isTestEnv ? DETAIL_CACHE_KEY_LIST.CHILD_TEST : DETAIL_CACHE_KEY_LIST.CHILD;

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