/*---------------------------------------------------------------------------------------------
 *  Copyright (c) Microsoft Corporation. All rights reserved.
 *  Licensed under the Source EULA. See License.txt in the project root for license information.
 *--------------------------------------------------------------------------------------------*/
import { env, UIKind, Uri } from 'vscode';

const LOCALHOST_ADDRESSES = ['localhost', '127.0.0.1', '0:0:0:0:0:0:0:1', '::1'];
function isLocalhost(uri: Uri): boolean {
	if (!/^https?$/i.test(uri.scheme)) {
		return false;
	}
	const host = uri.authority.split(':')[0];
	return LOCALHOST_ADDRESSES.indexOf(host) >= 0;
}

export function isSupportedEnvironment(uri: Uri): boolean {
	if (env.uiKind === UIKind.Desktop) {
		return true;
	}
	// local development (localhost:* or 127.0.0.1:*)
	if (isLocalhost(uri)) {
		return true;
	}
	// At this point we should only ever see https
	if (uri.scheme !== 'https') {
		return false;
	}

	return (
		// vscode.dev & insiders.vscode.dev
		/(?:^|\.)vscode\.dev$/.test(uri.authority) ||
		// github.dev & codespaces
		/(?:^|\.)github\.dev$/.test(uri.authority) ||
		// github.dev/codespaces local setup (github.localhost)
		/(?:^|\.)github\.localhost$/.test(uri.authority)
	);
}
