import {
  toFiniteNumberWithDefault,
  toNumber,
} from "@applicaster/zapp-react-native-utils/numberUtils";
import { isNil } from "ramda";

const dimensionRegex = /\b(width|height)=(\d+)\b/gi;

export const withDimensions = (
  url: Option<string>,
  width: Option<number | string>,
  height: Option<number | string>
) => {
  if (isNil(url)) {
    return url;
  }

  if (!url.toString().startsWith("http")) {
    return url;
  }

  const newWidth = Math.trunc(toFiniteNumberWithDefault(0, width));
  const newHeight = Math.trunc(toFiniteNumberWithDefault(0, height));

  return url.replace(dimensionRegex, (match, name, originalValue) => {
    if (name.toLocaleLowerCase() === "width" && newWidth > 0) {
      const originalWidth = toNumber(originalValue);

      if (originalWidth > 0 && originalWidth > newWidth) {
        return `${name}=${newWidth}`;
      }
    }

    if (name.toLocaleLowerCase() === "height" && newHeight > 0) {
      const originalHeight = toNumber(originalValue);

      if (originalHeight > 0 && originalHeight > newHeight) {
        return `${name}=${newHeight}`;
      }
    }

    return match;
  });
};
