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

import java.util.Date;
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.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.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.MensagemRecusa;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.MensagemRecusaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("editarMensagemRecusaController")
@Scope("prototype")
public class EditarMensagemRecusaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(EditarMensagemRecusaController.class);

	private MensagemRecusa mensagemRecusa;
	private BusquedaMensagemRecusaController busquedaMensagemRecusaController;

	@Autowired
	private MensagemRecusaService mensagemRecusaService;
	@Autowired
	private CategoriaService categoriaService;

	private Button btnApagar;
	private Button btnSalvar;
	private Button btnFechar;

	private Combobox cmbTipoEmpleado;
	private Textbox txtDescricao;
	private MyListbox mensagemRecusaList;

	private List<Categoria> lsCategoria;
	
	private Checkbox chkIndPadraoAPI;

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

		lsCategoria = categoriaService.obtenerTodos();

		mensagemRecusa = (MensagemRecusa) Executions.getCurrent().getArg().get("mensagemRecusa");
		mensagemRecusaList = (MyListbox) Executions.getCurrent().getArg().get("mensagemRecusaList");
		busquedaMensagemRecusaController = (BusquedaMensagemRecusaController) Executions.getCurrent().getArg().get("busquedaMensagemRecusaController");

		chkIndPadraoAPI.setChecked(mensagemRecusa != null ? mensagemRecusa.getPadraoAPI() : false);
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		cmbTipoEmpleado.getValue();
		txtDescricao.getValue();
		chkIndPadraoAPI.getValue();
		try {
			
			if(chkIndPadraoAPI.isChecked()) {
				if(mensagemRecusaService.existeCategoriaPadraoAPI(mensagemRecusa.getCategoria().getCategoriaId())) {
					Messagebox.show(Labels.getLabel("editarMensagemRecusaController.MSG.existePadraoAPI"),
							Labels.getLabel("busquedaMensagemRecusa.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					return;
				}
			}
			
			mensagemRecusa.setActivo(true);
			mensagemRecusa.setFecmodif(new Date());
			mensagemRecusa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			mensagemRecusa.setPadraoAPI(chkIndPadraoAPI.isChecked());

			mensagemRecusaService.suscribirActualizar(mensagemRecusa);
			Messagebox.show(Labels.getLabel("editarMensagemRecusaController.MSG.suscribirOK"),
					Labels.getLabel("busquedaMensagemRecusa.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			busquedaMensagemRecusaController.refreshLista(false);
			closeWindow();
		} catch (BusinessException e) {
			log.error(e);
			Messagebox.show(Labels.getLabel("editarMensagemRecusaController.MSG.error"),
					Labels.getLabel("busquedaMensagemRecusa.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

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

			if (resp == Messagebox.YES) {
				mensagemRecusaService.borrar(mensagemRecusa);
				busquedaMensagemRecusaController.refreshLista(false);
				Messagebox.show(
						Labels.getLabel("editarMensagemRecusaController.MSG.borrarOK"),
						Labels.getLabel("busquedaMensagemRecusa.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				closeWindow();
			}

		} catch (Exception ex) {
			log.error("", ex);

			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("busquedaMensagemRecusa.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
		}
	}

	public MensagemRecusa getMensagemRecusa() {
		return mensagemRecusa;
	}

	public void setMensagemRecusa(MensagemRecusa mensagemRecusa) {
		this.mensagemRecusa = mensagemRecusa;
	}

	public MensagemRecusaService getMensagemRecusaService() {
		return mensagemRecusaService;
	}

	public void setMensagemRecusaService(MensagemRecusaService mensagemRecusaService) {
		this.mensagemRecusaService = mensagemRecusaService;
	}

	public CategoriaService getCategoriaService() {
		return categoriaService;
	}

	public void setCategoriaService(CategoriaService categoriaService) {
		this.categoriaService = categoriaService;
	}

	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 Button getBtnFechar() {
		return btnFechar;
	}

	public void setBtnFechar(Button btnFechar) {
		this.btnFechar = btnFechar;
	}

	public Combobox getCmbTipoEmpleado() {
		return cmbTipoEmpleado;
	}

	public void setCmbTipoEmpleado(Combobox cmbTipoEmpleado) {
		this.cmbTipoEmpleado = cmbTipoEmpleado;
	}

	public Textbox getTxtDescricao() {
		return txtDescricao;
	}

	public void setTxtDescricao(Textbox txtDescricao) {
		this.txtDescricao = txtDescricao;
	}

	public MyListbox getMensagemRecusaList() {
		return mensagemRecusaList;
	}

	public void setMensagemRecusaList(MyListbox mensagemRecusaList) {
		this.mensagemRecusaList = mensagemRecusaList;
	}

	public List<Categoria> getLsCategoria() {
		return lsCategoria;
	}

	public void setLsCategoria(List<Categoria> lsCategoria) {
		this.lsCategoria = lsCategoria;
	}

	public Checkbox getChkIndPadraoAPI() {
		return chkIndPadraoAPI;
	}

	public void setChkIndPadraoAPI(Checkbox chkIndPadraoAPI) {
		this.chkIndPadraoAPI = chkIndPadraoAPI;
	}
}
