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

import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.zkoss.util.resource.Labels;
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.Categoria;
import com.rjconsultores.ventaboletos.entidad.Cliente;
import com.rjconsultores.ventaboletos.entidad.Constante;
import com.rjconsultores.ventaboletos.entidad.SolicitudExpreso;
import com.rjconsultores.ventaboletos.entidad.TipoCortesia;
import com.rjconsultores.ventaboletos.entidad.Usuario;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.LogAuditoriaService;
import com.rjconsultores.ventaboletos.service.SolicitudExpresosService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.gui.controladores.esquemaoperacional.BusquedaConfRestricaoCanalVentaController;
import com.rjconsultores.ventaboletos.web.gui.controladores.expressos.ExpressosPorCotizarController;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.PantallaUtileria;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

public class RenderExpresosPorCotizar implements ListitemRenderer {
	
	@Autowired
	SolicitudExpresosService expresosService;
	
	@Autowired
	ConstanteService constanteService;
	
	@Autowired
    private LogAuditoriaService logAuditoriaService;
	
	private ExpressosPorCotizarController expresosControllerWindow;
	
	private SolicitudExpreso expreso;
	SolicitudExpreso expresoClone;
	
	private Usuario usuario;
	
	public RenderExpresosPorCotizar(ExpressosPorCotizarController window) {
		super();
		expresosControllerWindow = 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.idaVuelta"));
            lc.setParent(item);
        }else if (expresos.getIndViajeRedondo() == true) {
        	lc = new Listcell(Labels.getLabel("expresosController.lbl.idaVuelta"));
            lc.setParent(item);
        }else {
        	lc = new Listcell("N/A");
            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 btnVerDetalle = new Button(Labels.getLabel("expresosController.lbl.verDetalle"));
        
        btnVerDetalle.addEventListener("onClick", new EventListener() {
			@Override
			public void onEvent(Event event) throws Exception {
				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
				expreso = (SolicitudExpreso)listItem.getAttribute("data");
				
				Map args = new HashMap();
				args.put("expreso", expreso);

				expresosControllerWindow.openWindow("/gui/expressos/detalleExpreso.zul", Labels.getLabel("verDetalleExpreso.window.title"), args, PantallaUtileria.MODAL);
			}
		});
        
        lc.appendChild(btnVerDetalle);
        
        switch(expresos.getStatusSolicitudExpresoId()) {
        	case 1:
        		Button btnCotizar = new Button("Cotizar");
        		
        		btnCotizar.addEventListener("onClick", new EventListener() {
        			@Override
        			public void onEvent(Event event) throws Exception {
        				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
        				expreso = (SolicitudExpreso)listItem.getAttribute("data");
        				
        				Map args = new HashMap();
        		        args.put("expreso", expreso);

        		        expresosControllerWindow.openWindow("/gui/expressos/cotizarExpreso.zul", Labels.getLabel("expresosPorCotizarCotizar.window.title"), args, PantallaUtileria.MODAL);
        			}
        		});
        		
        		lc.appendChild(btnCotizar); break;
        	case 2:
        		Constante constante = constanteService.buscarPorNomeConstante("FORMAPAGOCREDITO_ID");
        		String pagoCreditoConstante = constante == null ? "" : constante.getValorconstante();
        		
        		if(expresos.getFormaPagoId() == null || expresos.getFormaPagoId() != Integer.valueOf(pagoCreditoConstante)) {
        			Button btnPagoCredito = new Button(Labels.getLabel("expressosPorCotizarPagoCreditoController.lblDesc.label"));
            		
            		btnPagoCredito.setAttribute("data", data);
            		btnPagoCredito.addEventListener("onClick", new EventListener() {
            			@Override
            			public void onEvent(Event event) throws Exception {
            				Listitem listItem = (Listitem) event.getTarget().getParent().getParent();
            				expreso = (SolicitudExpreso)listItem.getAttribute("data");
            				expreso.clonar();
                        	expresoClone = expreso.getCloneObject();
            				
            				usuario = UsuarioLogado.getUsuarioLogado();
            				
            				expreso.setFormaPagoId(Integer.valueOf(pagoCreditoConstante));
            				expreso.setUsuarioAutorizaCredito(usuario.getUsuarioId());
            				expreso.setFechaHoraAutorizaCredito(Calendar.getInstance().getTime());
            				
            				expresosService.actualizacion(expreso);
            				
            				logAuditoriaService.auditar(expresoClone, expreso, null);
            			}
            		});
            		
            		lc.appendChild(btnPagoCredito);
        		}
        		
        		break;
        	//case 3: break;
        	//case 4: break;
        }
		
		item.setAttribute("data", expresos);
	}
}
