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

import java.io.InputStream;

import org.apache.commons.io.IOUtils;
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.zk.ui.event.EventListener;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.SolicitudExpreso;
import com.rjconsultores.ventaboletos.entidad.TrayectosExpresos;
import com.rjconsultores.ventaboletos.service.LogAuditoriaService;
import com.rjconsultores.ventaboletos.service.TrayectosExpresosService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
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.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderAsignarBusExpresos;

@Controller("asignarBusExpresosController")
@Scope("prototype")
public class AsignarBusExpresosController extends MyGenericForwardComposer{
	
	private static final long serialVersionUID = 1L;
	
	@Autowired
    private transient PagedListWrapper<TrayectosExpresos> plwTrayectosExpresos;
	
	@Autowired
	TrayectosExpresosService trayectoService;
	
	@Autowired
    private LogAuditoriaService logAuditoriaService;

	MyTextbox txtNumSolicitud;
	MyTextbox txtRuta;
	MyTextbox txtIdaRegreso;
	MyTextbox txtCantPasajeros;
	MyTextbox txtFechaIda;
	MyTextbox txtFechaRegreso;
	MyTextbox txtSitioRecogidaIda;
	MyTextbox txtSitioRecogidaRegreso;
	
	private MyListbox trayectosList;
	
	private Paging pagingTrayectosExpresos;
	
	SolicitudExpreso expreso;
	TrayectosExpresos trayecto;
	TrayectosExpresos trayectoClone;
	
	@Override
	public void doAfterCompose(Component comp) throws Exception {
		expreso = (SolicitudExpreso) Executions.getCurrent().getArg().get("expreso");
		
		super.doAfterCompose(comp);
		
		trayectosList.setItemRenderer(new RenderAsignarBusExpresos(this, new EventListener() {			
			@Override
			public void onEvent(Event arg0) throws Exception {
				trayecto = (TrayectosExpresos)arg0.getTarget().getAttribute("data");
				trayecto.clonar();
				trayectoClone = trayecto.getCloneObject();
				
				Media fluec = Fileupload.get();
				
				if(fluec.getFormat().equalsIgnoreCase("pdf")) {
				    InputStream inputStream = fluec.getStreamData();
				    byte[] bytesIs = IOUtils.toByteArray(inputStream);
					
				    trayecto.setDocFluec(bytesIs);
			        
				    trayectoService.actualizacion(trayecto);
				    
				    logAuditoriaService.auditar(trayectoClone, trayecto, null);
				} else {
					Messagebox.show(
							Labels.getLabel("cargaContratoController.MSG.errorFormatoContrato") + " " + fluec,
							Labels.getLabel("winExpressoCargaContrato.title"),
							Messagebox.OK, Messagebox.ERROR);
				}
				
				refreshLista();
			}
		}));
		
		txtNumSolicitud.setValue(expreso.getSolicitudExpresoId().toString());
		txtRuta.setValue(expreso.getCiudadOrigen().getNombciudad() + " - " + expreso.getCiudadDestino().getNombciudad());
		txtIdaRegreso.setValue(expreso.getIndViajeRedondo() == true ? "Ida y Regreso" : "Ida");
		txtCantPasajeros.setValue(expreso.getCantidadPasajeros().toString());
		txtFechaIda.setValue(DateUtil.getStringDate(expreso.getFechaHoraIda(), "dd/MM/yyyy"));
		txtFechaRegreso.setValue(DateUtil.getStringDate(expreso.getFechaHoraRegreso(), "dd/MM/yyyy"));
		txtSitioRecogidaIda.setValue(expreso.getDescSitioPartidaIda());
		txtSitioRecogidaRegreso.setValue(expreso.getDescSitioPartidaRegreso());
		
		refreshLista();
	}
	
	private void refreshLista() {
		HibernateSearchObject<TrayectosExpresos> buscarTrayectos =
				new HibernateSearchObject<TrayectosExpresos>(TrayectosExpresos.class, pagingTrayectosExpresos.getPageSize());
		
		buscarTrayectos.addFilterEqual("solicitudExpresoId.solicitudExpresoId", expreso.getSolicitudExpresoId());
		buscarTrayectos.addFilterEqual("activo", true);
		
		plwTrayectosExpresos.init(buscarTrayectos, trayectosList, pagingTrayectosExpresos);
	}

	public MyListbox getTrayectosList() {
		return trayectosList;
	}

	public void setTrayectosList(MyListbox trayectosList) {
		this.trayectosList = trayectosList;
	}

	public Paging getPagingTrayectosExpresos() {
		return pagingTrayectosExpresos;
	}

	public void setPagingTrayectosExpresos(Paging pagingTrayectosExpresos) {
		this.pagingTrayectosExpresos = pagingTrayectosExpresos;
	}

	public PagedListWrapper<TrayectosExpresos> getPlwTrayectosExpresos() {
		return plwTrayectosExpresos;
	}

	public void setPlwTrayectosExpresos(PagedListWrapper<TrayectosExpresos> plwTrayectosExpresos) {
		this.plwTrayectosExpresos = plwTrayectosExpresos;
	}
}
