type GetNestedValueOptions = {
  disableLocaleString?: boolean;
};

export function getNestedValue(
  obj: any,
  keys: string[],
  options?: GetNestedValueOptions
) {
  const value = keys?.reduce((acc, key) => acc?.[key], obj);

  if (options?.disableLocaleString) {
    if (typeof value === "string" && !isNaN(Number(value))) {
      return Number(value);
    }
    return value;
  }

  if (typeof value === "number") {
    if (Number.isInteger(value)) {
      return value.toLocaleString("en-US", { maximumFractionDigits: 0 });
    }
    return value.toLocaleString("en-US", {
      minimumFractionDigits: 2,
      maximumFractionDigits: 2,
    });
  }

  if (typeof value === "string" && !isNaN(Number(value))) {
    const numValue = Number(value);
    if (Number.isInteger(numValue)) {
      return numValue.toLocaleString("en-US", { maximumFractionDigits: 0 });
    }
    return numValue.toLocaleString("en-US", {
      minimumFractionDigits: 2,
      maximumFractionDigits: 2,
    });
  }

  return value;
}
