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

import java.util.List;

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.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.Datebox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Estado;
import com.rjconsultores.ventaboletos.entidad.Feriado;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.EstadoService;
import com.rjconsultores.ventaboletos.service.FeriadoService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

@Controller("editarConfigFeriadoController")
@Scope("prototype")
public class EditarConfigFeriadoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(EditarConfigFeriadoController.class);
	@Autowired
	private FeriadoService feriadoService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private EstadoService estadoService;
	private List<Empresa> lsEmpresa;
	private List<Estado> lsEstado;
	private Feriado feriado;
	private MyListbox configFeriadoList;
	private MyTextbox textboxDescricao;
	private Datebox fecFeriado;
	private Button btnApagar;

	public Feriado getFeriado() {
		return feriado;
	}

	public void setFeriado(Feriado feriado) {
		this.feriado = feriado;
	}

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

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

	public List<Estado> getLsEstado() {
		return lsEstado;
	}

	public void setLsEstado(List<Estado> lsEstado) {
		this.lsEstado = lsEstado;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();
		lsEstado = estadoService.obtenerTodos();
		super.doAfterCompose(comp);

		try {
			feriado = (Feriado) Executions.getCurrent().getArg().get("feriado");
			configFeriadoList = (MyListbox) Executions.getCurrent().getArg().get("configFeriadoList");

			if (feriado.getFeriadoId() == null) {
				btnApagar.setVisible(Boolean.FALSE);
			} else {
				feriado = feriadoService.obtenerID(feriado.getFeriadoId());
			}

			textboxDescricao.focus();
		} catch (Exception e) {
			log.error("Feriado: " + e);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarConfigFeriadoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		textboxDescricao.getValue();
		fecFeriado.getValue();

		if (feriado.getFeriadoId() == null) {
			java.sql.Date data = new java.sql.Date(fecFeriado.getValue().getTime());
			Empresa empresa = feriado.getEmpresa();
			Estado estado = feriado.getEstado();
			List<Feriado> lsFeriado = feriadoService.buscarDataEmpresaEstado(data, empresa, estado);
			if (!lsFeriado.isEmpty()) {
				Messagebox.show(
						Labels.getLabel("MSG.Registro.Existe"),
						Labels.getLabel("editarConfigFeriadoController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				return;
			}
		}

		try {
			if (feriado.getFeriadoId() == null) {
				feriadoService.suscribir(feriado);
				configFeriadoList.addItemNovo(feriado);
			} else {
				feriadoService.actualizacion(feriado);
				configFeriadoList.updateItem(feriado);
			}

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

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

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

			if (resp == Messagebox.YES) {

				feriadoService.borrar(feriado);

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

				configFeriadoList.removeItem(feriado);

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