package protocolP2P;
import java.util.HashMap;
import java.util.Map;
import tools.BytesArrayTools;

/** HashAlgorithm enum.
 * @author	Louis Royer
 * @author	Flavien Haas
 * @author	JS Auge
 * @version	1.0
 */
public enum HashAlgorithm {
	SHA512("SHA-512"),
	MD5("MD5");
	
	private String name;
	/* To be able to convert name to enum */
	private static final Map<String, HashAlgorithm> BY_NAME = new HashMap<>();
	/* Initialization of HashMap */
	static {
		for (HashAlgorithm h: values()) {
			assert !BY_NAME.containsKey(h.name) : "Duplicate in " + HashAlgorithm.class.getCanonicalName();
			BY_NAME.put(h.name, h);
		}
	}

	private HashAlgorithm(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	/** Gives enum from name.
	 * @param name	name of the hash
	 * @return	enum element
	 * @throws	InterlanError
	 */
	protected static HashAlgorithm fromName(String name) throws InternalError {
		HashAlgorithm h = BY_NAME.get(BytesArrayTools.cleanStrings(name));
		assert h != null : "Bad algorithm name: " + name;
		if (h == null) {
			throw new InternalError();
		}
		return h;
		
	}
	
}


