package lab11;

import java.util.HashMap;

public class GermanNumbers {
	HashMap<Integer,String> numNames;

	public GermanNumbers() {
		numNames = new HashMap<Integer,String>();
		numNames.put(0, "null");
		numNames.put(1, "ein");
		numNames.put(2, "zwei");
		numNames.put(3, "drei");
		numNames.put(4, "vier");
		numNames.put(5, "f\u00fcnf");
		numNames.put(6, "sechs");
		numNames.put(7, "sieben");
		numNames.put(8, "acht");
		numNames.put(9, "neun");
		numNames.put(10, "zehn");
		numNames.put(11, "\u00f6lf");
		numNames.put(12, "zw\u00f6lf");
		numNames.put(13, "dreizehn");
		numNames.put(14, "vierzehn");
		numNames.put(15, "f\u00fcnfzehn");
		numNames.put(16, "sechzehn");
		numNames.put(17, "siebzehn");
		numNames.put(18, "achtzehn");
		numNames.put(19, "neunzehn");
		numNames.put(20, "zwanzig");
		numNames.put(30, "drei\u00dfig");
		numNames.put(40, "vierzig");
		numNames.put(50, "f\u00fcnfzig");
		numNames.put(60, "sechszig");
		numNames.put(70, "siebzig");
		numNames.put(80, "achtzig");
		numNames.put(90, "neunzig");
	}
	
	public String nameNumber(long n) {
		if (n<0) return "minus " + nameNumber(-n);
		if (n==1) return "eins"; // Special case in german!
		if (n<=20) return numNames.get((int)n);
		if (n<100) {
			int tens=(int)((n/10)*10);
			int ones=(int)(n%10);
			if (ones==0) return numNames.get(tens);
			return numNames.get(ones)+ "und" + numNames.get(tens);
		}
		if (n<1000) {
			int hundreds=(int)(n/100);
			int rest=(int)(n%100);
			if (rest==0) return numNames.get(hundreds)+"hundert";
			return numNames.get(hundreds)+"hundert"+nameNumber(rest);
		}
		if (n<1000000) {
			long thous=n/1000;
			long rest=n%1000;
			if (rest==0) return nameNumber(thous)+"tausend";
			return nameNumber(thous)+"tausend"+nameNumber(rest);
		}
		if (n<1000000000) {
			long mills=n/1000000;
			long rest=n%1000000;
			if (rest==0) return nameNumber(mills)+"millionen";
			return nameNumber(mills)+"millionen"+nameNumber(rest);
		}
		if (n<1000000000000L) {
			long bills=n/1000000000;
			long rest=n%1000000000;
			if (rest==0) return nameNumber(bills)+"billionen";
			return nameNumber(bills)+"billionen"+ nameNumber(rest);
		}
		return "????";
	}

}
