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

import java.util.Arrays;
import java.util.List;
import java.util.Properties;

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.media.Media;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Fileupload;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.api.Comboitem;

import com.rjconsultores.ventaboletos.enums.SistemaEnum;
import com.rjconsultores.ventaboletos.service.CustomService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

/**
 * 
 * @author Wilian
 */
@Controller("editarCustomUploadArquivoController")
@Scope("prototype")
public class EditarCustomUploadArquivoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	
	@Autowired
	private CustomService customService;
	
	private Combobox cmbSistema;
	private List<SistemaEnum> lsSistemaEnum;
	
	private MyListbox customList;
	
	private Properties arquivo;
	
	private Checkbox chkSubstituirExistente;
	private Label lbNomeArquivo;

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

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

		customList = (MyListbox) Executions.getCurrent().getArg().get("customList");
		lsSistemaEnum = Arrays.asList(SistemaEnum.values());
	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
		try {
			
			if(arquivo == null) {
				Messagebox.show(
						Labels.getLabel("customController.uploadArquivo.naoCarregado"),
						Labels.getLabel("customController.uploadArquivo.titulo"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}
			
			if(getCmbSistema() == null || getCmbSistema().getSelectedItem() == null) {
				Messagebox.show(
						Labels.getLabel("customController.uploadArquivo.sistemaNaoInformado"),
						Labels.getLabel("customController.uploadArquivo.titulo"),
						Messagebox.OK, Messagebox.EXCLAMATION);
				return;
			}
			chkSubstituirExistente.getValue();
			
			int resp = Messagebox.show(
					Labels.getLabel("customController.uploadArquivo.confirmar"),
					Labels.getLabel("customController.uploadArquivo.titulo"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {
				Comboitem cbSistema = cmbSistema.getSelectedItem();
				SistemaEnum sistemaEnum = (SistemaEnum) cbSistema.getValue();
				
				customService.carregarArquivoProperties(sistemaEnum, arquivo, chkSubstituirExistente.isChecked());
				
				Messagebox.show(
						Labels.getLabel("customController.MSG.suscribirOK"),
						Labels.getLabel("customController.uploadArquivo.titulo"),
						Messagebox.OK, Messagebox.INFORMATION);
				
				closeWindow();
			}
			
			
		} catch (Exception ex) {
			log.error(ex.getMessage(), ex);
			Messagebox.show(
					Labels.getLabel("MSG.Error"),
					Labels.getLabel("customController.uploadArquivo.titulo"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}
	
	
	public void onClick$btnCarregarArquivo(Event ev) throws InterruptedException {
		try {
			Media mArquivoPropriedade = Fileupload.get();
			
			lbNomeArquivo.setValue("");
			arquivo = null;
			if(mArquivoPropriedade != null) {
				lbNomeArquivo.setValue(mArquivoPropriedade.getName());
				arquivo = new Properties();
				arquivo.load(mArquivoPropriedade.getStreamData());
			}
		} catch (Exception ex) {
			log.error(ex.getMessage(), ex);
			Messagebox.show(
					Labels.getLabel("customController.uploadArquivo.arquivoInvalido"),
					Labels.getLabel("customController.uploadArquivo.titulo"),
					Messagebox.OK, Messagebox.ERROR);
		}
	}

	public MyListbox getCustomList() {
		return customList;
	}

	public void setCustomList(MyListbox customList) {
		this.customList = customList;
	}

	public List<SistemaEnum> getLsSistemaEnum() {
		return lsSistemaEnum;
	}

	public void setLsSistemaEnum(List<SistemaEnum> lsSistemaEnum) {
		this.lsSistemaEnum = lsSistemaEnum;
	}

	public Combobox getCmbSistema() {
		return cmbSistema;
	}

	public void setCmbSistema(Combobox cmbSistema) {
		this.cmbSistema = cmbSistema;
	}

	public Label getLbNomeArquivo() {
		return lbNomeArquivo;
	}

}
