package com.rjconsultores.ventaboletos.web.gui.controladores.configuracioneccomerciales;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.ClienteCorporativo;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.CiudadService;
import com.rjconsultores.ventaboletos.service.ClienteCorporativoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxCiudad;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEmpresa;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Controller("editarClienteCorporativoController")
@Scope("prototype")
public class EditarClienteCorporativoController extends MyGenericForwardComposer {

	private static final String TITULO = "editarClienteCorporativoController.window.title";
	private static final long serialVersionUID = 1L;
	@Autowired
	private ClienteCorporativoService clienteCorpService;
	@Autowired	
	private EmpresaService empresaService;
	@Autowired
	private CiudadService ciudadService;

	private ClienteCorporativo clienteCorp;
	private MyListbox clienteCorpList;

	private List<Empresa> lsEmpresa;
	
	//Cliente
	private Datebox datCriacao;	
	private Longbox txtIdentificacao;
	private MyTextbox txtRazao;
	private Textbox txtEmail;
	private MyTextbox txtTelefone;
	private MyComboboxEmpresa cmbEmpresa;
	
	//Endereço
	private Textbox txtLogradouro;
	private MyComboboxCiudad cmbCidade;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		setLsEmpresa(empresaService.obtenerTodos());
				
		super.doAfterCompose(comp);
		
		clienteCorp = (ClienteCorporativo) Executions.getCurrent().getArg().get("clienteCorporativo");
		clienteCorpList = (MyListbox) Executions.getCurrent().getArg().get("clienteCorporativoList");
		
		if(clienteCorp.getEmpresaId() != null ) {
			selecionaEmpresaPorId(clienteCorp.getEmpresaId());
		}
		
		if(clienteCorp.getCiudadId() != null ) {
			Ciudad cid = ciudadService.obtenerID(clienteCorp.getCiudadId());
			selecionaCombo(cid, cmbCidade);
		}		
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		
		try {
			Comboitem empresa = cmbEmpresa.getSelectedItem();
			if( empresa != null ) {
				clienteCorp.setEmpresaId( ((Empresa)empresa.getValue()).getEmpresaId() );
			}
			
			Comboitem cidade = cmbCidade.getSelectedItem();
			if( cidade != null ) {
				clienteCorp.setCiudadId( ((Ciudad)cidade.getValue()).getCiudadId() );
			}
			
			validaCampos();
			
			clienteCorpService.suscribirActualizar(clienteCorp);
			clienteCorpList.updateItem(clienteCorp);

			Messagebox.show(
					Labels.getLabel("MSG.suscribirOK"),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();
		} catch (BusinessException ex) {
			Messagebox.show(
					ex.getMessage(),
					Labels.getLabel(TITULO),
					Messagebox.OK, Messagebox.ERROR);					
		} catch (Exception ex) {
			Messagebox.show(
						Labels.getLabel("MSG.Error"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.ERROR);
		}
	}

	private void validaCampos() throws BusinessException {
		if ( clienteCorp.getEmpresaId() == null || 
				clienteCorp.getNomeClienteCorp() == null || 
				clienteCorp.getIdentificacao() == null ||
				clienteCorp.getDataCriacao() == null ){
			throw new BusinessException("editarClienteCorporativoController.MSG.camposObrigatorios");
		}
	}

	public void onClick$btnApagar(Event ev) throws InterruptedException {
		Integer resp = Messagebox.show(
					Labels.getLabel("MSG.borrarPergunta"),
					Labels.getLabel(TITULO),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {

			clienteCorpService.borrar(clienteCorp);

			Messagebox.show(
						Labels.getLabel("MSG.borrarOK"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.INFORMATION);

			clienteCorpList.removeItem(clienteCorp);

			closeWindow();
		}
	}
	
	private void selecionaEmpresaPorId(Integer empresaId) {
		for (Empresa emp : lsEmpresa) {
			if(emp.getEmpresaId().equals(empresaId)) {
				selecionaCombo(emp, cmbEmpresa);
				break;
			}
		}
	}
}
