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

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.List;

import javax.activation.MimetypesFileTypeMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;
import javax.xml.namespace.QName;

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.event.Event;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Filedownload;
import org.zkoss.zul.Textbox;

import com.rjconsultores.hstcajservice.ws.BilheteService;
import com.rjconsultores.hstcajservice.ws.BilheteServiceService;
import com.rjconsultores.hstcajservice.ws.Bilhetes;
import com.rjconsultores.hstcajservice.ws.ExportaIntegracaoWS;
import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioErrosIntegracaoBGMController")
@Scope("prototype")
public class RelatorioErrosIntegracaoBGMController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	private Datebox dataInicial;
	private Datebox dataFinal;	
	private MyComboboxEstandar cmbEmpresa;
	private Textbox txtNumPtoVtaInicial;
	private Textbox txtNumPtoVtaFinal;
	private List<Empresa> lsEmpresa;
	//private MyTextbox txtNombrePuntoVentaInicial;
	
	private BilheteService bilheteService;
	
	
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private ConstanteService constanteService;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();
		super.doAfterCompose(comp);		
	}
		
	/**
	 * @throws Exception
	 * 
	 */
	@SuppressWarnings({ })
	private void executarRelatorio() throws Exception {
		
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");		
		final Integer COD_EMPRESA_GRUPO = 1; 
		
		dataInicial.getValue();
		dataFinal.getValue();
		cmbEmpresa.getValue();
		txtNumPtoVtaInicial.getValue();
		txtNumPtoVtaFinal.getValue();			
		
		String dataInicio= format.format(dataInicial.getValue());
		String dataFim = format.format(dataFinal.getValue());
		String puntoVentaInicial = txtNumPtoVtaInicial.getValue();
		String puntoVentaFinal= txtNumPtoVtaFinal.getValue();
		String empresa= ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getEmpresaId().toString();
		
		configurarWebService();
				
		Bilhetes bilhetesInconsistentes = new Bilhetes();
		List<ExportaIntegracaoWS> bilhetesInconsistentesWebService = bilheteService.buscarBilhetesInconsistente(dataInicio, dataFim,
				puntoVentaInicial, puntoVentaFinal, COD_EMPRESA_GRUPO, empresa, "");
		if(bilhetesInconsistentesWebService != null && bilhetesInconsistentesWebService.get(bilhetesInconsistentesWebService.size()-1).getRegistros() > 0){
			bilhetesInconsistentes.setBilhetes(bilhetesInconsistentesWebService);
			String fileName = gerarArquivoXML(bilhetesInconsistentes);		
			baixarArquivo(fileName); 
		}else{
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("relatorioErrosIntegracaoBGMController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
				ex.printStackTrace();
			}
		}	
		
	}

	private void configurarWebService() throws MalformedURLException {
		URL baseUrl = com.rjconsultores.hstcajservice.ws.BilheteServiceService.class.getResource(".");
        URL url = new URL(baseUrl, getUrlWebService());
		BilheteServiceService bilheteServiceService = new BilheteServiceService(
				url, new QName("http://ws.hstcajservice.rjconsultores.com/", "BilheteServiceService"));
		bilheteService = bilheteServiceService.getBilheteServicePort();
	}

	private void baixarArquivo(String fileName) throws FileNotFoundException {
		FileInputStream inputStream;
		File filez = new File(fileName);
        if (filez.exists()) {
        	inputStream = new FileInputStream(filez);
            Filedownload.save(inputStream, new MimetypesFileTypeMap().getContentType(filez), filez.getName());
        }
        filez.delete();
	}

	private String gerarArquivoXML(Bilhetes bilhetesInconsistentes) throws JAXBException, PropertyException {
		JAXBContext jaxbContext = JAXBContext.newInstance(Bilhetes.class);
		String BILHETES_INCONSISTENTES = "Bilhetes Inconsistentes.xml";
		Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
		jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);		
		String diretorio = System.getProperty("jboss.server.log.dir");		
		String fileName = diretorio + File.separator + " " + BILHETES_INCONSISTENTES;				
		jaxbMarshaller.marshal(bilhetesInconsistentes, new File(fileName));
		return fileName;
	}
	
	private String getUrlWebService() {
		Constante constante = constanteService.buscarPorNomeConstante("WS_BGM");
		if (constante == null) {
			return "";
		}
		return constante.getValorconstante();
	}

	public void onClick$btnExecutarRelatorio(Event ev) throws Exception{
		executarRelatorio();
	}
	
	private void executarPesquisa() {
	
	}

	public void onClick$btnPesquisa(Event ev) {
		executarPesquisa();
	}

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

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



}
