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

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

import org.apache.logging.log4j.LogManager;
import org.apache.logging.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.event.Event;
import org.zkoss.zul.Button;

import com.rjconsultores.ventaboletos.entidad.AsistenciaDeViajeEmpresa;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.service.AsistenciaDeViajeEmpresaService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;

@Controller("editarAsistenciaDeViajeEmpresaController")
@Scope("prototype")
public class EditarAsistenciaDeViajeEmpresaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private AsistenciaDeViajeEmpresaService asistenciaDeViajeEmpresaService;
	@Autowired
	private EmpresaService empresaService;

	private List<Empresa> lsEmpresa;
	private MyListbox asistenciaDeViajeEmpresaList;
	private MyComboboxEstandar cmbEmpresa;
	private Button btnApagar;
	private Button btnSalvar;
	private MyTextboxDecimal txtTarifa;
	private static Logger log = LogManager.getLogger(EditarAsistenciaDeViajeEmpresaController.class);

	private AsistenciaDeViajeEmpresa asistenciaDeViajeEmpresa;

	@Override
	public void doAfterCompose(Component comp) throws Exception {

		lsEmpresa = empresaService.obtenerTodos();

		super.doAfterCompose(comp);

		asistenciaDeViajeEmpresa = (AsistenciaDeViajeEmpresa) Executions.getCurrent().getArg()
				.get("asistenciaDeViajeEmpresa");
		asistenciaDeViajeEmpresaList = (MyListbox) Executions.getCurrent().getArg().get("asistenciaDeViajeEmpresaList");
		
		if (asistenciaDeViajeEmpresa.getAsistenciaDeViajeEmpresaId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		} else {
        	txtTarifa.setValue(asistenciaDeViajeEmpresa.getTarifa() != null ? asistenciaDeViajeEmpresa.getTarifa().toString() : "");
        }
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtTarifa.getValue();
		try {
			Empresa empresa = (Empresa) cmbEmpresa.getSelectedItem().getValue();

			asistenciaDeViajeEmpresa.setEmpresa(empresa);
			asistenciaDeViajeEmpresa.setTarifa(new BigDecimal(txtTarifa.getText()));

			if (asistenciaDeViajeEmpresa.getAsistenciaDeViajeEmpresaId() == null) {

				if (asistenciaDeViajeEmpresaService.existe(empresa)) {
					Messagebox.show(Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.MSG.existe"),
							Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.window.title"), Messagebox.OK,
							Messagebox.INFORMATION);
					return;
				}

				asistenciaDeViajeEmpresaService.suscribir(asistenciaDeViajeEmpresa);
				asistenciaDeViajeEmpresaList.addItemNovo(asistenciaDeViajeEmpresa);
			} else {
				asistenciaDeViajeEmpresaService.actualizacion(asistenciaDeViajeEmpresa);
				asistenciaDeViajeEmpresaList.updateItem(asistenciaDeViajeEmpresa);
			}

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

			closeWindow();

		} catch (Exception ex) {
			log.error(ex);
			Messagebox.show(Labels.getLabel("MSG.Error"),
					Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.window.title"), Messagebox.OK,
					Messagebox.ERROR);

		}
	}

	public void onClick$btnApagar(Event ev) {
		try {
			int resp = Messagebox.show(Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.MSG.borrarPergunta"),
					Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {
				asistenciaDeViajeEmpresaService.borrar(asistenciaDeViajeEmpresa);

				Messagebox.show(Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.MSG.borrarOK"),
						Labels.getLabel("busquedaAsistenciaDeViajeEmpresaController.window.title"), Messagebox.OK,
						Messagebox.INFORMATION);

				asistenciaDeViajeEmpresaList.removeItem(asistenciaDeViajeEmpresa);

				closeWindow();
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}

	public MyComboboxEstandar getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public Button getBtnApagar() {
		return btnApagar;
	}

	public void setBtnApagar(Button btnApagar) {
		this.btnApagar = btnApagar;
	}

	public Button getBtnSalvar() {
		return btnSalvar;
	}

	public void setBtnSalvar(Button btnSalvar) {
		this.btnSalvar = btnSalvar;
	}

	public MyListbox getAsistenciaDeViajeEmpresaList() {
		return asistenciaDeViajeEmpresaList;
	}

	public void setAsistenciaDeViajeEmpresaList(MyListbox asistenciaDeViajeEmpresaList) {
		this.asistenciaDeViajeEmpresaList = asistenciaDeViajeEmpresaList;
	}

	public MyTextboxDecimal getTxtTarifa() {
		return txtTarifa;
	}

	public void setTxtTarifa(MyTextboxDecimal txtTarifa) {
		this.txtTarifa = txtTarifa;
	}

	public AsistenciaDeViajeEmpresa getAsistenciaDeViajeEmpresa() {
		return asistenciaDeViajeEmpresa;
	}

	public void setAsistenciaDeViajeEmpresa(AsistenciaDeViajeEmpresa asistenciaDeViajeEmpresa) {
		this.asistenciaDeViajeEmpresa = asistenciaDeViajeEmpresa;
	}

}
