// Copyright 2024 The Outline Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

export function joinHostPort(host: string, port: string): string {
  if (host.includes(':')) {
    return `[${host}]:${port}`;
  } else {
    return `${host}:${port}`;
  }
}

export function splitHostPort(address: string): {host: string; port: string} {
  const splitPos = address.lastIndexOf(':');
  if (splitPos === -1) {
    throw new Error('host:port separator not found');
  }
  let host = address.substring(0, splitPos);
  if (host.length > 0 && host[0] === '[') {
    if (host[host.length - 1] !== ']') {
      throw new Error('IPv6 address missing closing ]');
    }
    host = host.substring(1, host.length - 1);
  }
  const port = address.substring(splitPos + 1, address.length);

  return {
    host: host,
    port: port,
  };
}
