// @author Guilliano
//
// Gerenciador dos acessorios selecionados
// da tabela de produtos.
// Metodos:
//  - <ConjuntoGenerico> getAcessorios() : obtém o conjunto de todos os skus da lista de acessorios
//										   adicionados ao gerenciador. Veja a documentacao do ConjuntoGenerico.
//  - <Sku> getSkuEscolhido() : Obtém o sku escolhido (o sku principal da página).
//  - <void> setSkuEscolhido(<Sku> novoSkuEscolhido) : Seta o novo sku escolhido.
//  - <float> getPrecoTotal() : Obtem a soma de todos os precos dos skus (incluindo o escolhido).
//  - <ConjuntoGenerico> getAcessorios() : Obtem o conjunto de todos os skus acessorios do sku escolhido.
//
//
function GerenciadorAcessorios(skuEscolhidoInicial){
	this.acessorios = new ConjuntoGenerico(); // conjunto dos acessorios.
	this.getAcessorios = GerenciadorAcessorios_GetAcessorios;
	this.skuEscolhido = skuEscolhidoInicial; // seta o sku escolhido inicialmente na página.
	this.getSkuEscolhido = GerenciadorAcessorios_GetSkuEscolhido;
	this.setSkuEscolhido = GerenciadorAcessorios_SetSkuEscolhido;
	this.getPrecoTotal = GerenciadorAcessorios_GetPrecoTotal;
	this.getPrecoTotalAsString = GerenciadorAcessorios_GetPrecoTotalAsString;
	this.getTodosIds = GerenciadorAcessorios_GetTodosIds;
	this.formatarInteiro = GerenciadorAcessorios_FormatarInteiro;
}
//
// Obtém os skus que foram escolhidos como acessorios.
// O tipo de retorno é um objeto do tipo ConjuntoGenerico (veja documentacao).
//
function GerenciadorAcessorios_GetAcessorios(){
	return this.acessorios;
}
//
// Metodo get para o sku escolhido do gerenciador de acessorios.
//
function GerenciadorAcessorios_GetSkuEscolhido(){
	return this.skuEscolhido;
}
//
// Metodo set para o sku escolhido da página. Esse metodo deve ser usado para configurar o novo sku que foi escolhido
// para ser o principal.
//
function GerenciadorAcessorios_SetSkuEscolhido(novoSkuEscolhido){
	this.skuEscolhido = novoSkuEscolhido;
}
//
// Obtem o valor do preço total calculado atraves da soma de todos os preços dos sku mais o preco do sku principal.
//
function GerenciadorAcessorios_GetPrecoTotal(){
	
	if (this.getSkuEscolhido() == null) {
		throw "NullPointerException {'Nenhum sku escolhido.'}";
	}
	var precoTotal = this.getSkuEscolhido().getPreco(); // conta o preco do sku escolhido principal.
	if (this.getAcessorios().tamanho() > 0) {
		var skusAcessorios = this.getAcessorios().getObjetos();
		for (var acessorio in skusAcessorios) {
			precoTotal += skusAcessorios[acessorio].getPreco(); // conta o preço do acessorio.
		}
	}
	return precoTotal;
}
//
// Obtem o total dos precos dos skus em forma de uma string em formato PT-BR.
//
function GerenciadorAcessorios_GetPrecoTotalAsString(){
	var totalFloat = this.getPrecoTotal();
	var totalString = "" + totalFloat;
	// faz um split pela virgula.
	var totalSplited = totalString.split(".");
	var inteiroString = "0";
	if(totalSplited.length > 0){
		inteiroString = totalSplited[0];
		if(inteiroString.length > 3){
			inteiroString = this.formatarInteiro(inteiroString);
		}	
	}
	var decimalString = "00";
	if(totalSplited.length > 1){
		// pega a parte decimal.
		decimalString = totalSplited[1];
	    
	    // completa a parte decimal com um zero.
	    if(decimalString.length == 1){
	        decimalString = decimalString + "0";
	    }
	}
	return inteiroString + "," + decimalString;
}
//
// Obtém um array com todos os ids dos skus, incluindo o id do sku escolhido.
//
function GerenciadorAcessorios_GetTodosIds(){
	var todosIds = new Array();
	if (this.getSkuEscolhido() == null) {
		throw "NullPointerException {'Nenhum sku escolhido.'}";
	}
	//todosIds.push(this.getSkuEscolhido().getId());
	var skusAcessorios = this.getAcessorios().getObjetos();
	for(var acessorio in skusAcessorios){
		todosIds.push(skusAcessorios[acessorio].getId());
	}
	return todosIds;
}
//
// Transforma uma string de um numero inteiro para um numero inteiro no formato pt-br.
//
function GerenciadorAcessorios_FormatarInteiro(inteiroString){

	var inteiroStringLocal = inteiroString;
		
	var tokens = new Array();
	var startToken = inteiroString;
	var lastStart = inteiroStringLocal.length;
	for (var i = inteiroString.length - 3; i >= 1; i = i - 3) {
		startToken = inteiroStringLocal.substring(0, i);
		var token = inteiroStringLocal.slice(i, lastStart);
		lastStart = i;
		tokens.push("." + token);
	}
	for(var j = tokens.length - 1; j >= 0; j = --j){
		startToken = startToken + tokens[j];
	}	
	return startToken;
}
