package lab11;

import java.util.HashMap;

public class EnglishNumbers {
	HashMap<Integer,String> numNames;

	public EnglishNumbers() {
		numNames = new HashMap<Integer,String>();
		numNames.put(0, "zero");
		numNames.put(1, "one");
		numNames.put(2, "two");
		numNames.put(3, "three");
		numNames.put(4, "four");
		numNames.put(5, "five");
		numNames.put(6, "six");
		numNames.put(7, "seven");
		numNames.put(8, "eight");
		numNames.put(9, "nine");
		numNames.put(10, "ten");
		numNames.put(11, "eleven");
		numNames.put(12, "twelve");
		numNames.put(13, "thirteen");
		numNames.put(14, "fourteen");
		numNames.put(15, "fifteen");
		numNames.put(16, "sixteen");
		numNames.put(17, "seventeen");
		numNames.put(18, "eighteen");
		numNames.put(19, "nineteen");
		numNames.put(20, "twenty");
		numNames.put(30, "thirty");
		numNames.put(40, "forty");
		numNames.put(50, "fifty");
		numNames.put(60, "sixty");
		numNames.put(70, "seventy");
		numNames.put(80, "eighty");
		numNames.put(90, "ninety");
	}
	
	public String nameNumber(long n) {
		if (n<0) return "minus " + nameNumber(-n);
		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(tens)+"-"+numNames.get(ones);
		}
		if (n<1000) {
			int hundreds=(int)(n/100);
			int rest=(int)(n%100);
			if (rest==0) return numNames.get(hundreds)+" hundred";
			return numNames.get(hundreds)+" hundred "+nameNumber(rest);
		}
		if (n<1000000) {
			long thous=n/1000;
			long rest=n%1000;
			if (rest==0) return nameNumber(thous)+" thousand";
			return nameNumber(thous)+" thousand "+nameNumber(rest);
		}
		if (n<1000000000) {
			long mills=n/1000000;
			long rest=n%1000000;
			if (rest==0) return nameNumber(mills)+" million";
			return nameNumber(mills)+" million "+nameNumber(rest);
		}
		if (n<1000000000000L) {
			long bills=n/1000000000;
			long rest=n%1000000000;
			if (rest==0) return nameNumber(bills)+" billion";
			return nameNumber(bills)+" billion "+ nameNumber(rest);
		}
		return "????";
	}

	public static void main(String[] args) {
		EnglishNumbers cvt=new EnglishNumbers();
		GermanNumbers ger=new GermanNumbers();
		SpanishNumbers esp = new SpanishNumbers();
		for(int i=0; i<args.length; i++) {
			long n=Long.parseLong(args[i]);
			System.out.println(n + " is " + cvt.nameNumber(n));
			System.out.println("          or " + ger.nameNumber(n));
			System.out.println("          or " + esp.nameNumber(n));
		}

	}

}
