package ca.carleton.gcrc.couch.client.impl;

public class CouchUtils {
	
	static final public String HTTP_PROTOCOL = "http://";
	static final public String HTTPS_PROTOCOL = "https://";

	static public String computeEffectiveServerUrl(
			String serverUrl
			,String userName
			,String password
		) throws Exception {
		
		if( null == userName && null != password ) {
			throw new Exception("Can not specify a password without a user name");
		}
		if( null != userName && null == password ) {
			throw new Exception("Can not specify a user name without a password");
		}
		if( null != userName && null == serverUrl ) {
			throw new Exception("Can not specify a user name/password without a server URL");
		}
		if( null == serverUrl ) {
			return "";
		}
		
		String serverUrlWithoutProtocol = null;
		String protocol = null;
		if( serverUrl.startsWith(HTTP_PROTOCOL) ) {
			protocol = HTTP_PROTOCOL;
			serverUrlWithoutProtocol = serverUrl.substring(HTTP_PROTOCOL.length());
			
		} else if( serverUrl.startsWith(HTTPS_PROTOCOL) ) {
			protocol = HTTPS_PROTOCOL;
			serverUrlWithoutProtocol = serverUrl.substring(HTTPS_PROTOCOL.length());
			
		} else {
			throw new Exception("Server URL must specify a protocol (http:// or https://)");
		}
		
		if( null != userName ) {
			serverUrl = protocol + userName + ":" + password + "@" + serverUrlWithoutProtocol;
		}
		
		return serverUrl;
	}

	static public String computeEffectiveDatabaseUrl(
			String serverUrl
			,String userName
			,String password
			,String databaseName
		) throws Exception {
		
		if( null == databaseName ) {
			throw new Exception("Can not specify a db URL without a database name");
		}
		
		String effectiveServerUrl = computeEffectiveServerUrl(serverUrl, userName, password);
		if( "".equals(effectiveServerUrl) ) {
			return databaseName;
		}

		if( effectiveServerUrl.endsWith("/") ) {
			return effectiveServerUrl + databaseName;
		}
		
		return effectiveServerUrl + "/" + databaseName;
	}
}
