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

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;

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.Filedownload;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.UploadEvent;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.ImportacaoClientesService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;

@Controller("importarClientesController")
@Scope("prototype")
public class ImportarClientesController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private ImportacaoClientesService importacaoClientesService;
	@Autowired
	private EmpresaService emresaService;
	
	private Label lblQtdeClientesImportar;
	private MyListbox empresasList;
	private List<String[]> clientes;
	private List<Empresa> lsEmpresa;
	private Empresa empresa;

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

		lsEmpresa = emresaService.obtenerTodos();
		empresasList.setData(lsEmpresa);
		
	}

	public void onUpload(UploadEvent event) throws IOException, InterruptedException {
		if (empresasList.getSelectedCount() <= 0){
			Messagebox.show(Labels.getLabel("importarClientesController.MSG.suscribirErro"),
					Labels.getLabel("importarClientesController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		
		Media media = event.getMedia();

		Reader reader = media.getReaderData();
		String[] resultado = importacaoClientesService.lerArquivo(reader, (List<Empresa>)(Object)empresasList.getSelectedsItens());
		reader.close();

		String gravados = resultado[0];
		Messagebox.show(gravados,
				Labels.getLabel("importarClientesController.window.title"),
				Messagebox.OK, Messagebox.INFORMATION);

		String erros = resultado[1];
		if (!erros.isEmpty()) {
			InputStream is = new ByteArrayInputStream(erros.getBytes());
			Filedownload.save(is, "application/txt", "erros_importacao.txt");
		}
		
	}

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

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

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
}
