package lab11;

import java.util.HashMap;

public class SpanishNumbers {
	HashMap<Integer,String> numNames;

	public SpanishNumbers() {
		numNames = new HashMap<Integer,String>();
		numNames.put(0, "cero");
		numNames.put(1, "uno");
		numNames.put(2, "dos");
		numNames.put(3, "tres"); // This is when 3 is the only syllable
		numNames.put(4, "cuatro");
		numNames.put(5, "cinco");
		numNames.put(6, "seis");
		numNames.put(7, "siete");
		numNames.put(8, "ocho");
		numNames.put(9, "nueve");
		numNames.put(10, "diez");
		numNames.put(11, "once");
		numNames.put(12, "doce");
		numNames.put(13, "trece");
		numNames.put(14, "catorce");
		numNames.put(15, "quince");
		numNames.put(16, "dieciseis");
		numNames.put(17, "diecisiete");
		numNames.put(18, "dieciocho");
		numNames.put(19, "diecinueve");
		numNames.put(20, "vienti");
		numNames.put(21, "vientiuno");
		numNames.put(22, "vientid\u00f3s");
		numNames.put(23, "vientitr\u00e9s");
		numNames.put(24, "vienticuatro");
		numNames.put(25, "vienticinco");
		numNames.put(26, "veintis\u00e9is");
		numNames.put(27, "vientisiete");
		numNames.put(29, "vientinueve");
		numNames.put(30, "treinta");
		numNames.put(40, "cuarenta");
		numNames.put(50, "cincuenta");
		numNames.put(60, "sesenta");
		numNames.put(70, "setenta");
		numNames.put(80, "ochenta");
		numNames.put(90, "noventa");
	}
	
	public String nameNumber(long n) {
		if (n<0) return "minus " + nameNumber(-n);
		if (n<=30) 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)+ " y "+numNames.get(ones);
		}
		if (n<1000) {
			int hundreds=(int)(n/100);
			int rest=(int)(n%100);
			String hname="";
			if (hundreds==1) hname="ciento";
			else if (hundreds==5) hname="quinientos";
			else if (hundreds==7) hname="setecientos";
			else if (hundreds==9) hname="novecientos";
			else hname=numNames.get(hundreds)+"cientos";
			if (rest==0) return hname;
			return hname+" " + nameNumber(rest);
		}
		if (n<1000000) {
			long thous=n/1000;
			long rest=n%1000;
			String tname="";
			if (thous==1) tname="mil";
			else tname=nameNumber(thous)+" mil";
			if (rest==0) return tname;
			return tname+" "+nameNumber(rest);
		}
		if (n<1000000000000L) {
			long mills=n/1000000;
			long rest=n%1000000;
			String mname="";
			if (mills==1) mname="un mill\u00f3n";
			else mname=nameNumber(mills) + " millones";
			if (rest==0) return mname;
			return mname + " "+nameNumber(rest);
		}
		return "????";
	}
}
