/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.catalogos;

import java.io.IOException;
import java.util.Calendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

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.UiException;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Image;

import com.rjconsultores.ventaboletos.constantes.Constantes;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Imagem;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.ImagemService;
import com.rjconsultores.ventaboletos.utilerias.Application;
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;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

@Controller("editarImagemController")
@Scope("prototype")
public class EditarImagemController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private ImagemService imagemService;
	@Autowired
	private EmpresaService empresaService;
	private Imagem imagem;
	private List<Empresa> lsEmpresa;
	private MyListbox imagemList;
	private BusquedaImagemController busquedaImagemController;
	private Image img;
	private MyTextbox txtNome;
	private Button btnApagar;
	private static Logger log = LogManager.getLogger(EditarImagemController.class);
	private Combobox cmbEmpresa;

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

		lsEmpresa = empresaService.obtenerTodos();
		super.doAfterCompose(comp);

		imagem = (Imagem) Executions.getCurrent().getArg().get("imagem");
		busquedaImagemController = (BusquedaImagemController) Executions.getCurrent().getArg().get("busquedaImagemController");
		if (imagem.getNombImagem() != null) {
			img.setContent(new org.zkoss.image.AImage(imagem.getNombImagem(),
					imagem.getImagem()));
		}
		imagemList = (MyListbox) Executions.getCurrent().getArg().get("imagemList");

		if (imagem.getImagemId() == null) {
			btnApagar.setVisible(Boolean.FALSE);
		}else{
			txtNome.setDisabled(true);
		}

		txtNome.focus();
	}

	public void uploadPhoto(UploadEvent event) {
		org.zkoss.util.media.Media media = event.getMedia();

		try {
			if (media instanceof org.zkoss.image.Image) {
				img.setContent(new org.zkoss.image.AImage(media.getName(),
						media.getStreamData()));
			} else {
				Messagebox.show(
						Labels.getLabel("editarMarcaController.MSG.errorIMG") + " " + media,
						Labels.getLabel("editarMarcaController.window.title"),
						Messagebox.OK, Messagebox.ERROR);
			}
		} catch (IOException ex) {
			log.error(ex);
			throw UiException.Aide.wrap(ex);
		} catch (InterruptedException ex) {
			log.error(ex);
			throw UiException.Aide.wrap(ex);
		}
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		txtNome.getText();
		try {
			String nomeImagem = imagem.getNombImagem();
			List<Imagem> lsImagens = imagemService.buscar(nomeImagem);
			boolean podeSalvar = false;
			if (lsImagens.isEmpty()) {
				podeSalvar = true;
			} else {
				for (Imagem m : lsImagens) {
					if (m.getImagemId().equals(imagem.getImagemId())) {
						podeSalvar = true;
					}
				}
			}

			if (podeSalvar) {
				imagem.setActivo(Boolean.TRUE);
				imagem.setFecmodif(Calendar.getInstance().getTime());
				imagem.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

				if (img.getContent() != null) {
					imagem.setImagem(img.getContent().getByteData());
				}

				if (imagem.getImagem() == null) {
					int resp = Messagebox.show(
							Labels.getLabel("editarMarcaController.MSG.SinImagenPergunta"),
							Labels.getLabel("editarMarcaController.window.title"),
							Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

					if (resp == Messagebox.YES) {
						if (imagem.getImagemId() == null) {
							imagemService.suscribir(imagem);
							imagemList.addItem(imagem);

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

							closeWindow();
							Executions.getCurrent().sendRedirect("");
						} else {
							imagemService.actualizacion(imagem);
							imagemList.updateItem(imagem);

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

							closeWindow();
							Executions.getCurrent().sendRedirect("");
						}
					}
				} else {
					if (imagem.getImagemId() == null) {
						imagemService.suscribir(imagem);
						imagemList.addItem(imagem);
					} else {
						imagemService.actualizacion(imagem);
						imagemList.updateItem(imagem);
					}

					sendUpdateImage();

					Messagebox.show(
							Labels.getLabel("editarMarcaController.MSG.suscribirOK"),
							Labels.getLabel("editarMarcaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					busquedaImagemController.refreshLista();
					closeWindow();
					Executions.getCurrent().sendRedirect("");
				}
			} else {
				Messagebox.show(
						Labels.getLabel("MSG.Registro.Existe"),
						Labels.getLabel("editarMarcaController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
		} catch (Exception ex) {
			log.error("editarMarcaController: " + ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("editarMarcaController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

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

			if (resp == Messagebox.YES) {
				imagemService.borrar(imagem);

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

				imagemList.removeItem(imagem);

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

	private void sendUpdateImage() {

		try {

			Set<String> images = new HashSet<String>();
			images.add(Constantes.IMAGEM_EMPRESA);
			images.add(Constantes.IMAGEM_EMPRESA_GENERICA);

			if (imagem != null && images.contains(imagem.getNombImagem())) {
				Application application = (Application) AppContext.getApplicationContext().getBean("app");
				application.setImage(imagem);
			}

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

	public ImagemService getImagemService() {
		return imagemService;
	}

	public void setImagemService(ImagemService imagemService) {
		this.imagemService = imagemService;
	}

	public EmpresaService getEmpresaService() {
		return empresaService;
	}

	public void setEmpresaService(EmpresaService empresaService) {
		this.empresaService = empresaService;
	}

	public Imagem getImagem() {
		return imagem;
	}

	public void setImagem(Imagem imagem) {
		this.imagem = imagem;
	}

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

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

	public MyListbox getImagemList() {
		return imagemList;
	}

	public void setImagemList(MyListbox imagemList) {
		this.imagemList = imagemList;
	}

	public BusquedaImagemController getBusquedaImagemController() {
		return busquedaImagemController;
	}

	public void setBusquedaImagemController(BusquedaImagemController busquedaImagemController) {
		this.busquedaImagemController = busquedaImagemController;
	}

	public Image getImg() {
		return img;
	}

	public void setImg(Image img) {
		this.img = img;
	}

	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;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

}
