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

import java.math.BigDecimal;
import java.util.Calendar;
import java.util.List;

import org.apache.commons.lang.StringUtils;
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.Checkbox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoCancelacion;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.service.OrgaoCancelacionService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
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 com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderOrgaoCancelacion;

@Controller("editarOrgaoConcedenteController")
@Scope("prototype")
public class EditarOrgaoConcedenteController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	private OrgaoConcedente orgaoConcedente;
	@Autowired
	private OrgaoCancelacionService orgaoCancelacionService;
	private MyListbox orgaoConcedenteList;
	private MyListbox orgaoCancelacionList;
	private MyTextbox txtNome;
	private MyTextboxDecimal txtPorcMulta;
	private MyTextboxDecimal txtPorcCambio;
	private MyTextbox txtTiempoLimite;
	private MyTextbox txtTiempoLimiteCambio;
	private Checkbox chkIndnaopermitetransferencia;
	private MyComboboxEmpresa cmbEmpresa;
	private MyTextboxDecimal txtIndicePeaje;

	private List<OrgaoCancelacion> lsOrgaoCancelacion;
	
	public OrgaoConcedente getOrgaoConcedente() {
		return orgaoConcedente;
	}

	public void setOrgaoConcedente(OrgaoConcedente orgaoConcedente) {
		this.orgaoConcedente = orgaoConcedente;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		orgaoConcedente = (OrgaoConcedente) Executions.getCurrent().getArg().get("orgaoConcedente");
		orgaoConcedenteList = (MyListbox) Executions.getCurrent().getArg().get("orgaoConcedenteList");
		orgaoCancelacionList.setItemRenderer(new RenderOrgaoCancelacion());
		lsOrgaoCancelacion = orgaoCancelacionService.buscarPorOrgao(orgaoConcedente);
		orgaoCancelacionList.setData(lsOrgaoCancelacion);
		txtIndicePeaje.setValue(orgaoConcedente.getIndicePeaje() != null ? orgaoConcedente.getIndicePeaje().toString().replace(".", ",") : "");
		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		if(txtIndicePeaje != null && txtIndicePeaje.getValueDecimal() != null){
			BigDecimal bg = new BigDecimal(txtIndicePeaje.getValueDecimal().doubleValue());
			if(bg.equals(new BigDecimal(0))){
				Messagebox.show(
						Labels.getLabel("editarOrgaoConcedenteController.MSG.indicePeajeZeroInvalido"),
						Labels.getLabel("editarOrgaoConcedenteController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			}else{
				orgaoConcedente.setIndicePeaje(txtIndicePeaje.getValueDecimal());
			}
		}else{
			orgaoConcedente.setIndicePeaje(txtIndicePeaje.getValueDecimal());
		}
		orgaoConcedenteService.actualizacion(orgaoConcedente);
		orgaoConcedenteList.updateItem(orgaoConcedente);

		Messagebox.show(
				Labels.getLabel("editarOrgaoConcedenteController.MSG.suscribirOK"),
				Labels.getLabel("editarOrgaoConcedenteController.window.title"),
				Messagebox.OK, Messagebox.INFORMATION);

		closeWindow();
	}
	
	private Boolean parametroRepetido(Empresa empresa){
		for (OrgaoCancelacion o : lsOrgaoCancelacion){
			if (o.getEmpresa().equals(empresa)){
				return true;
			}
		}
		return false;
	}
	
	public void onClick$btnAdicionarParametros(Event ev) throws InterruptedException {
		if (parametroRepetido((Empresa)cmbEmpresa.getSelectedItem().getValue())){
			Messagebox.show(
					Labels.getLabel("editarOrgaoConcedenteController.MSG.parametroRepetido"),
					Labels.getLabel("editarOrgaoConcedenteController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		
		OrgaoCancelacion oc = new OrgaoCancelacion();
		oc.setEmpresa((Empresa)cmbEmpresa.getSelectedItem().getValue());
		oc.setOrgao(orgaoConcedente);
		oc.setPorccambio(txtPorcCambio.getValueDecimal());
		oc.setPorcmulta(txtPorcMulta.getValueDecimal());
		oc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		oc.setFecmodif(Calendar.getInstance().getTime());
		oc.setTiempolimite(new Integer(txtTiempoLimite.getValue()));
		oc.setIndnaopermitetransferencia(chkIndnaopermitetransferencia.isChecked());
		
		if(StringUtils.isNotBlank(txtTiempoLimiteCambio.getValue())) {
			oc.setTiempolimiteCambio(new Integer(txtTiempoLimiteCambio.getValue()));
		}
		oc.setActivo(Boolean.TRUE);
		
		oc = orgaoCancelacionService.suscribirActualizacion(oc);
		lsOrgaoCancelacion.add(oc);
		orgaoCancelacionList.setData(lsOrgaoCancelacion);
	}
	
	public void onClick$btnRemoverParametros(Event ev) throws InterruptedException {
		OrgaoCancelacion oc = (OrgaoCancelacion)orgaoCancelacionList.getSelected();
		orgaoCancelacionService.borrar(oc);
		lsOrgaoCancelacion.remove(oc);
		orgaoCancelacionList.setData(lsOrgaoCancelacion);
	}

	public MyTextboxDecimal getTxtIndicePeaje() {
		return txtIndicePeaje;
	}

	public void setTxtIndicePeaje(MyTextboxDecimal txtIndicePeaje) {
		this.txtIndicePeaje = txtIndicePeaje;
	}	
}