const PROTOCOL_AND_WWW = /^https?:\/\/(www\.)?/;
const TRAILING_SLASH = /\/$/;
const HTTP_ADDRESS = /^https?:\/\//i;
const COMPLETE_ADDRESS = /^(https?:\/\/[^\s.]+\.[^\s]+|\/[^\s]*)$/;
const FILE_ADDRESS =
	/\.(pdf|zip|docx?|xlsx?|pptx?|csv|txt|mp3|mp4|epub)(\?|#|$)/i;

export function shortUrl( url: string ): string {
	return url.replace( PROTOCOL_AND_WWW, '' );
}

function pathOnSite( url: string, siteUrl: string ): string | null {
	const siteRoot = siteUrl.replace( TRAILING_SLASH, '' );

	if ( siteRoot === '' || ! url.startsWith( `${ siteRoot }/` ) ) {
		return null;
	}

	return url.slice( siteRoot.length );
}

export function displayUrl( url: string, siteUrl: string ): string {
	return pathOnSite( url, siteUrl ) ?? shortUrl( url );
}

export function fieldUrl( url: string, siteUrl: string ): string {
	return pathOnSite( url, siteUrl ) ?? url;
}

export function isHttpUrl( url: string ): boolean {
	return HTTP_ADDRESS.test( url.trim() );
}

export function looksValid( typedAddress: string ): boolean {
	return COMPLETE_ADDRESS.test( typedAddress.trim() );
}

export function looksLikeFile( url: string ): boolean {
	return FILE_ADDRESS.test( url );
}
