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

import java.util.Calendar;

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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.TipoInformativoComissao;
import com.rjconsultores.ventaboletos.service.TipoInformativoComissaoService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

@Controller("editarTipoInformativoComissaoController")
@Scope("prototype")
public class EditarTipoInformativoComissaoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private TipoInformativoComissaoService tipoInformativoComissaoService;

	private TipoInformativoComissao tipoInformativoComissao;
	private MyListbox tipoInformativoComissaoList;
	private MyTextbox txtNome;

	private Button btnApagar;

	private static Logger log = LogManager.getLogger(EditarTipoInformativoComissaoController.class);

	public TipoInformativoComissao getTipoInformativoComissao() {
		return tipoInformativoComissao;
	}

	public void setTipoInformativoComissao(TipoInformativoComissao tipoInformativoComissao) {
		this.tipoInformativoComissao = tipoInformativoComissao;
	}

	public MyListbox getTipoInformativoComissaoList() {
		return tipoInformativoComissaoList;
	}

	public void setTipoInformativoComissaoList(MyListbox tipoInformativoComissaoList) {
		this.tipoInformativoComissaoList = tipoInformativoComissaoList;
	}

	public MyTextbox getTxtNome() {
		return txtNome;
	}

	public void setTxtNome(MyTextbox txtNome) {
		this.txtNome = txtNome;
	}

	public Button getBtnApagar() {
		return btnApagar;
	}

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

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

		tipoInformativoComissao = (TipoInformativoComissao) Executions.getCurrent().getArg().get("tipoInformativoComissao");
		tipoInformativoComissaoList = (MyListbox) Executions.getCurrent().getArg().get("tipoInformativoComissaoList");

		if (tipoInformativoComissao != null && tipoInformativoComissao.getDesctipo() != null) {
			txtNome.setText(tipoInformativoComissao.getDesctipo());
		}
		if (tipoInformativoComissao.getTipoinformativoId() == null) {
			btnApagar.setVisible(false);
		}
		txtNome.focus();
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {

		txtNome.getValue();

		try {
			tipoInformativoComissao.setActivo(Boolean.TRUE);
			tipoInformativoComissao.setFecmodif(Calendar.getInstance().getTime());
			tipoInformativoComissao.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			tipoInformativoComissao.setDesctipo(txtNome.getText());

			if (!tipoInformativoComissaoService.existeTipoInformativo(tipoInformativoComissao)) {
				Messagebox.show(
						Labels.getLabel("editarTipoInformativoComissaoController.MSG.DescricaoDuplicada"),
						Labels.getLabel("busquedaTipoServicioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				return;
			}

			if (tipoInformativoComissao.getTipoinformativoId() == null) {
				tipoInformativoComissaoService.suscribir(tipoInformativoComissao);
				tipoInformativoComissaoList.addItemNovo(tipoInformativoComissao);
			} else {
				tipoInformativoComissaoService.actualizacion(tipoInformativoComissao);
				tipoInformativoComissaoList.updateItem(tipoInformativoComissao);
			}

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

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

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

			if (resp == Messagebox.YES) {

				tipoInformativoComissaoService.borrar(tipoInformativoComissao);

				Messagebox.show(
						Labels.getLabel("editarTipoInformativoComissaoController.MSG.BorrarOK"),
						Labels.getLabel("busquedaTipoServicioController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				tipoInformativoComissaoList.removeItem(tipoInformativoComissao);

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