package com.rjconsultores.ventaboletos.web.utilerias.render;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.zkoss.util.media.AMedia;
import org.zkoss.util.resource.Labels;
import org.zkoss.zhtml.Filedownload;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.ListitemRenderer;

import com.rjconsultores.ventaboletos.entidad.SolicitudExpreso;
import com.rjconsultores.ventaboletos.entidad.TrayectosExpresos;
import com.rjconsultores.ventaboletos.service.TrayectosExpresosService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.web.gui.controladores.expressos.DocumentosExpresosController;
import com.rjconsultores.ventaboletos.web.gui.controladores.expressos.ExpressosPorCotizarController;
import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

public class RenderDocumentosExpresos implements ListitemRenderer {
	
	private SolicitudExpreso expreso;
	private List<TrayectosExpresos> trayectos;
	
	@Autowired
	TrayectosExpresosService trayectosServices;
	
	DocumentosExpresosController winDocumentosExpresosController;
	
	public RenderDocumentosExpresos(DocumentosExpresosController window) {
		super();
		winDocumentosExpresosController = window;
	}

	@Override
	public void render(Listitem item, Object data) throws Exception {
		SolicitudExpreso expresos = (SolicitudExpreso) data;
		
		Listcell lc = new Listcell(expresos.getSolicitudExpresoId().toString());
		lc.setParent(item);
		
		lc = new Listcell(DateUtil.getStringDate(expresos.getFechaSolicitud(), "dd/MM/yyyy"));
        lc.setParent(item);
        
        String ruta = expresos.getCiudadOrigen().getNombciudad() + " - " + expresos.getCiudadDestino().getNombciudad();
        lc = new Listcell(ruta);
        lc.setParent(item);
        
        if(expresos.getIndViajeRedondo() == false) {
        	lc = new Listcell(Labels.getLabel("expresosController.lbl.ida"));
            lc.setParent(item);
        }else if (expresos.getIndViajeRedondo() == true) {
        	lc = new Listcell(Labels.getLabel("expresosController.lbl.idaVuelta"));
            lc.setParent(item);
        }else {
        	lc = new Listcell();
            lc.setParent(item);
        }
        
        
        lc = new Listcell(DateUtil.getStringDate(expresos.getFechaHoraIda(), "dd/MM/yyyy HH:mm"));
        lc.setParent(item);
        
        lc = new Listcell(DateUtil.getStringDate(expresos.getFechaHoraRegreso(), "dd/MM/yyyy HH:mm"));
        lc.setParent(item);
        
        lc = new Listcell(expresos.getDescSitioPartidaIda());
        lc.setParent(item);
        
        lc = new Listcell(expresos.getDescSitioPartidaRegreso());
        lc.setParent(item);
        
        if(expresos.getIndRequiereDispVehiculo() == 0) {
        	lc = new Listcell("No");
            lc.setParent(item);
        }else if (expresos.getIndRequiereDispVehiculo() == 1) {
        	lc = new Listcell("Sí");
            lc.setParent(item);
        }else {
        	lc = new Listcell("N/A");
            lc.setParent(item);
        }
        
        lc = new Listcell();
        lc.setParent(item);
        
        Button btnVerContrato = new Button(Labels.getLabel("expresosController.lbl.btnVerContrato"));
        btnVerContrato.addEventListener("onClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
				expreso = (SolicitudExpreso)listItem.getAttribute("data");
				
				if(expreso.getDocContrato() != null) {
					AMedia amedia = new AMedia("CONTRATO - EXPRESO " + expreso.getSolicitudExpresoId() + ".pdf", "pdf", null, expreso.getDocContrato());
					
					org.zkoss.util.media.Media pdf = amedia;
					Filedownload.save(pdf);
				}
			}
		});
        lc.appendChild(btnVerContrato);
        
        Button btnVerFuec = new Button(Labels.getLabel("expresosController.lbl.btnVerFuec"));
        btnVerFuec.addEventListener("onClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
				expreso = (SolicitudExpreso)listItem.getAttribute("data");
				
				TrayectosExpresosService trayectosServices = (TrayectosExpresosService)AppContext.getApplicationContext().getBean("trayectosExpresosService");
				trayectos = trayectosServices.obtenerTrayectosPorServicioId(expreso);
				
				for(TrayectosExpresos trayecto: trayectos) {
					if(trayecto.getDocFluec() != null) {
						AMedia amedia = new AMedia("FLUEC - TRAYECTO " + trayecto.getTrayectoExpresoId() + ".pdf", "pdf", null, trayecto.getDocFluec());
						org.zkoss.util.media.Media pdf = amedia;
						Filedownload.save(pdf);
					}
				}
			}
		});
        lc.appendChild(btnVerFuec);
        
        Button btnVerListaPasajeros = new Button(Labels.getLabel("expresosController.lbl.btnVerListaPasajeros"));
        btnVerListaPasajeros.addEventListener("onClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
				expreso = (SolicitudExpreso)listItem.getAttribute("data");
				
				if(expreso.getDocListaPasajeros() != null) {
					AMedia amedia = new AMedia("LISTA DE PASAJEROS - EXPRESO " + expreso.getStatusSolicitudExpresoId() + ".pdf", "pdf", null, expreso.getDocListaPasajeros());
					org.zkoss.util.media.Media pdf = amedia;
					Filedownload.save(pdf);
				}
			}
		});
        lc.appendChild(btnVerListaPasajeros);
		
		item.setAttribute("data", expresos);
	}

}
