package br.com.rbg.pedidovenda.controller;

import java.io.Serializable;

import javax.enterprise.inject.Produces;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

import br.com.rbg.pedidovenda.model.Cliente;
import br.com.rbg.pedidovenda.model.Endereco;
import br.com.rbg.pedidovenda.model.TipoPessoa;
import br.com.rbg.pedidovenda.service.CadastroClienteService;
import br.com.rbg.pedidovenda.util.jsf.FacesUtil;

@Named
@ViewScoped
public class CadastroClienteBean implements Serializable {

	private static final long serialVersionUID = 1L;
	
	@Inject
	private CadastroClienteService cadastroClienteService;
	
	@Produces
	@ClienteEdicao
	private Cliente cliente;
	
	private Endereco endereco;
	private Endereco enderecoSelecionado;
		
	private void limpar() {
		cliente = new Cliente();
		endereco = new Endereco();
	}
		
	public CadastroClienteBean() {
		limpar();
	}
	
	public void inicializar() {
		if (cliente==null){
			limpar();
		}
	}
		
	public void salvar() {
		System.out.println(this.cliente.getDocumentoReceitaFederal());
		this.cliente = cadastroClienteService.salvar(this.cliente);
		
		limpar();
		FacesUtil.addInfoMessage("Cliente salvo com sucesso!");
	}
	
	public void prepararNovoEndereco() {
		   this.endereco = new Endereco();
		}
	
	public void incluirEndereco() {
		if (!cliente.getEnderecos().contains(this.endereco)){
			this.endereco.setCliente(cliente);
			this.cliente.getEnderecos().add(this.endereco);
			this.endereco = new Endereco();
		}
		
	}
	
	public void removerEndereco() {
		this.cliente.getEnderecos().remove(enderecoSelecionado);
		FacesUtil.addInfoMessage("Endereco excluído com sucesso!");
		prepararNovoEndereco();
	}
	
	public boolean isEditando() {
		return this.cliente.getId() != null;
	}
	
	public Cliente getCliente() {
		return cliente;
	}	
	
	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}
	
	public Endereco getEndereco() {
		return endereco;
	}
	
	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
	
	public Endereco getEnderecoSelecionado() {
		return enderecoSelecionado;
	}
	
	public void setEnderecoSelecionado(Endereco enderecoSelecionado) {
		this.enderecoSelecionado = enderecoSelecionado;
	}
	
	public TipoPessoa[] getTipos() {
		return TipoPessoa.values();
	}
			
}
