package {
	import flash.utils.getQualifiedClassName;
	
	public class Debug {
		public static function print_r(obj:Object, nivel:int=0):void {
			var pad:String = "";
			var i:String;
			var j:int;
			var tipo:String = getQualifiedClassName(obj);
			
			// Coloca \t no início das strings
			for (j=0; j<nivel; j++) {
				pad += "\t";
			}
			
			if (tipo != "Array") {
				trace(pad+tipo);
			}
			switch (tipo) {
			case "Array":
				trace(pad+"Array ["+String(obj.length)+"]");
				for (i in obj) {
					trace(pad+i+":");
					Debug.print_r(obj[i], nivel+1);
				}
				break;
			case "Object":
				for (i in obj) {
					trace(pad+i+":");
					Debug.print_r(obj[i], nivel+1);
				}
				break;
			case "Territorio":
				trace(pad+"id: "+obj.id);
				trace(pad+"nome: "+obj.nome);
				trace(pad+"soldados: "+obj.soldados);
				break;
			case "Continente":
				trace(pad+"id: "+obj.id);
				trace(pad+"nome: "+obj.nome);
				trace(pad+"bonus: "+obj.bonus);
				break;
			case "Jogador":
				trace(pad+"id: "+obj.id);
				trace(pad+"nome: "+obj.nome);
				trace(pad+"humano: "+obj.humano);
				trace(pad+"agressividade: "+obj.agressividade);
				trace(pad+"objetividade: "+obj.objetividade);
				trace(pad+"sorte: "+obj.sorte);
				trace(pad+"ativo: "+obj.ativo);
				trace(pad+"perdas: "+obj.perdas);
				break;
			case "Objetivo":
				trace(pad+"id: "+obj.id);
				trace(pad+"nome: "+obj.nome);
				break;
			case "Movimento":
				if (obj.tipo == Movimento.COLOCAR) {
					trace(pad+"colocar "+obj.num+" em "+obj.alvo.nome);
				} else if (obj.tipo == Movimento.FIM_ETAPA) {
					trace(pad+"fim da etapa");
				} else if (obj.tipo == Movimento.ATACAR) {
					trace(pad+obj.origem.nome+" ataca "+obj.alvo.nome+" com "+obj.num);
					trace(pad+obj.origem.nome+" perdeu "+obj.perdas_origem);
					trace(pad+obj.alvo.nome+" perdeu "+obj.perdas_alvo);
					if (obj.movidos) {
						trace(pad+obj.alvo.nome+" é conquistado e recebe "+obj.movidos+" soldados");
					}
				} else if (obj.tipo == Movimento.MOVER) {
					trace(pad+"Mover "+obj.num+" exércitos de "+obj.origem.nome+" para "+obj.alvo.nome);
				}
				break;
			case "Carta":
				trace(pad+(obj.territorio ? obj.territorio.nome : "")+" ("+String(obj.figura)+")");
				break;
			default:
				trace(pad+obj);
				for (i in obj) {
					trace(pad+i+":");
					Debug.print_r(obj[i], nivel+1);
				}
			}
			
			if (nivel == 0) {
				trace("");
			}
		}
	}
}