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

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
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.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.FechamentoParamptovta;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.FechamentoParamptovtaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarFechamentoParamptovtaController")
@Scope("prototype")
public class EditarFechamentoParamptovtaController extends MyGenericForwardComposer {
	
	private static final long serialVersionUID = 1L;
	
	private static Logger log = Logger.getLogger(EditarFechamentoParamptovtaController.class);

	@Autowired
	private FechamentoParamptovtaService fechamentoParamptovtaService;
		
	private Textbox txtIntervalofechamento;
	
	private Combobox cmbEmpresa;	
	private List<Empresa> lsEmpresas;
	
	private Combobox cmbPuntoventa;
	private List<PuntoVenta> lsPuntoventa;
	
	private FechamentoParamptovta fechamentoParamptovta;
	
	private MyListbox paramsList;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {		
		lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		setLsPuntoventa(new ArrayList<PuntoVenta>());
		
		super.doAfterCompose(comp);

		Long fechamentoParamptovtaId = (Long) Executions.getCurrent().getArg().get("fechamentoparamptovtaId");
		if(fechamentoParamptovtaId != null && fechamentoParamptovtaId > 0) {
			fechamentoParamptovta = fechamentoParamptovtaService.obtenerID(fechamentoParamptovtaId);
			if(fechamentoParamptovta.getEmpresa() != null) {
				cmbEmpresa.setText(fechamentoParamptovta.getEmpresa().getNombempresa());
			}
			
			if(fechamentoParamptovta.getPuntoventa() != null) {
				cmbPuntoventa.setText(fechamentoParamptovta.getPuntoventa().getNombpuntoventa());
			}

		}
		paramsList = (MyListbox) Executions.getCurrent().getArg().get("paramsList");
		
	}
	
	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public FechamentoParamptovta getFechamentoParamptovta() {
		return fechamentoParamptovta;
	}

	public void setFechamentoParamptovta(FechamentoParamptovta fechamentoParamptovta) {
		this.fechamentoParamptovta = fechamentoParamptovta;
	}
	
	public void onClick$btnSalvar() {
		try {
			if(getFechamentoParamptovta() == null) {
				setFechamentoParamptovta(new FechamentoParamptovta());
			}
			
			if(StringUtils.isNotEmpty(txtIntervalofechamento.getText())){
				getFechamentoParamptovta().setIntervalofechamento(Integer.valueOf(txtIntervalofechamento.getText()));
			}
			
			if(cmbEmpresa.getSelectedItem() != null) {
				getFechamentoParamptovta().setEmpresa((Empresa) cmbEmpresa.getSelectedItem().getValue());
			}
			
			if(cmbPuntoventa.getSelectedItem() != null) {
				getFechamentoParamptovta().setPuntoventa((PuntoVenta) cmbPuntoventa.getSelectedItem().getValue());
			}
			
			getFechamentoParamptovta().setFecmodif(Calendar.getInstance().getTime());
			getFechamentoParamptovta().setActivo(true);
			getFechamentoParamptovta().setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			
			setFechamentoParamptovta(fechamentoParamptovtaService.suscribirOrActualizacion(getFechamentoParamptovta()));
			
			if(paramsList != null) {
				paramsList.updateItem(getFechamentoParamptovta());
			}
			
			Messagebox.show(
					Labels.getLabel("editarFechamentoParamptovtaController.MSG.suscribirOK"),
					Labels.getLabel("editarFechamentoParamptovtaController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			
			closeWindow();
		} catch (Exception ex) {
			log.info(ex.getLocalizedMessage());
			Clients.alert(ex.getLocalizedMessage(),
					Labels.getLabel("editarFechamentoParamptovtaController.window.title"), Messagebox.INFORMATION);
		}
	}
	
	public void onClick$btnApagar() {
		try {
			if(getFechamentoParamptovta() != null && getFechamentoParamptovta().getFechamentoparamptovtaId() != null) {
				int resp = Messagebox.show(
						Labels.getLabel("editarFechamentoParamptovtaController.MSG.borrarPergunta"),
						Labels.getLabel("editarFechamentoParamptovtaController.window.title"),
						Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
	
				if (resp == Messagebox.YES) {
					fechamentoParamptovtaService.borrar(getFechamentoParamptovta());
	
					Messagebox.show(
							Labels.getLabel("editarFechamentoParamptovtaController.MSG.borrarOK"),
							Labels.getLabel("editarFechamentoParamptovtaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
	
					if (paramsList != null) {
						paramsList.removeItem(getFechamentoParamptovta());
					}
	
					closeWindow();
				}
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public List<PuntoVenta> getLsPuntoventa() {
		return lsPuntoventa;
	}

	public void setLsPuntoventa(List<PuntoVenta> lsPuntoventa) {
		this.lsPuntoventa = lsPuntoventa;
	}

	public FechamentoParamptovtaService getFechamentoParamptovtaService() {
		return fechamentoParamptovtaService;
	}

	public void setFechamentoParamptovtaService(FechamentoParamptovtaService fechamentoParamptovtaService) {
		this.fechamentoParamptovtaService = fechamentoParamptovtaService;
	}

	public Textbox getTxtIntervalofechamento() {
		return txtIntervalofechamento;
	}

	public void setTxtIntervalofechamento(Textbox txtIntervalofechamento) {
		this.txtIntervalofechamento = txtIntervalofechamento;
	}

	public Combobox getCmbPuntoventa() {
		return cmbPuntoventa;
	}

	public void setCmbPuntoventa(Combobox cmbPuntoventa) {
		this.cmbPuntoventa = cmbPuntoventa;
	}

	public MyListbox getParamsList() {
		return paramsList;
	}

	public void setParamsList(MyListbox paramsList) {
		this.paramsList = paramsList;
	}	
}
