// Cache to store previous requests
let cache = new Map();

const getIndicatorData = async (rules, tickerList) => {
  console.log("Checking cache and fetching new data if needed");

  // Extract the rule names
  let getRuleOfList = rules?.map((rule) => rule.rule) || [];
  // Convert the rule set into a string key for the cache
  const ruleKey = JSON.stringify(getRuleOfList);

  // Check if data for this rule set is already in the cache
  if (cache.has(ruleKey)) {
    console.log("Returning cached data");
    return cache.get(ruleKey);
  }

  // Fetch new data if it's not in the cache
  const postData = { ruleOfList: getRuleOfList, tickerList: tickerList };
  const response = await fetch("/api/indicator-data", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(postData),
  });

  const output = await response.json();
  // Store the new data in the cache
  cache.set(ruleKey, output);

  return output;
};

onmessage = async (event) => {
  const { ruleOfList, tickerList } = event.data || {};
  const rawData = await getIndicatorData(ruleOfList, tickerList);

  postMessage({ message: "success", rawData });
};

export {};
