import { ExternalLink } from 'lucide-react';

import { Icon } from '@@/Icon';

type Props = {
  hostURL?: string;
  hostPort?: string | number;
  containerPort?: string | number;
};

export function PublishedPortLink({ hostURL, hostPort, containerPort }: Props) {
  return (
    <a
      className="image-tag"
      href={generateContainerURL(hostURL, hostPort, containerPort)}
      target="_blank"
      rel="noreferrer"
    >
      <Icon icon={ExternalLink} />
      {hostPort}:{containerPort}
    </a>
  );
}

function generateContainerURL(
  hostURL?: string,
  hostPort?: string | number,
  containerPort?: string | number
) {
  const url = stripTrailingSlash(hostURL?.toLowerCase());

  if (!url.startsWith('http://') && !url.startsWith('https://')) {
    if (String(containerPort).endsWith('443')) {
      return `https://${url}:${hostPort}`;
    }

    return `http://${url}:${hostPort}`;
  }

  return `${url}:${hostPort}`;
}

function stripTrailingSlash(url?: string) {
  if (!url) {
    return '';
  }
  return url.endsWith('/') ? url.slice(0, -1) : url;
}