import * as assert from 'assert'
import {IGitSourceSettings} from './git-source-settings'
import {URL} from 'url'

export function getFetchUrl(settings: IGitSourceSettings): string {
  assert.ok(
    settings.repositoryOwner,
    'settings.repositoryOwner must be defined'
  )
  assert.ok(settings.repositoryName, 'settings.repositoryName must be defined')
  const serviceUrl = getServerUrl(settings.isGist)
  const encodedOwner = encodeURIComponent(settings.repositoryOwner)
  const encodedName = encodeURIComponent(settings.repositoryName)
  let encodedNwo = `${encodedOwner}/${encodedName}`
  if (settings.isGist) {
    encodedNwo = encodedName
  }
  if (settings.sshKey) {
    return `git@${serviceUrl.hostname}:${encodedNwo}.git`
  }

  // "origin" is SCHEME://HOSTNAME[:PORT]
  return `${serviceUrl.origin}/${encodedNwo}`
}

export function getServerUrl(isGist: boolean): URL {
  // todo: remove GITHUB_URL after support for GHES Alpha is no longer needed
  let serverUrl = new URL(
    process.env['GITHUB_SERVER_URL'] ||
      process.env['GITHUB_URL'] ||
      'https://github.com'
  )

  // todo: don't assume subdomain isolation
  if (isGist) {
    serverUrl.hostname = `gist.${serverUrl.hostname}`
  }

  return serverUrl
}