/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.tarifas;

import java.util.List;

import org.apache.log4j.Logger;
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.Combobox;

import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.Marca;
import com.rjconsultores.ventaboletos.entidad.Moneda;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.entidad.Tarifa;
import com.rjconsultores.ventaboletos.entidad.Tramo;
import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.TarifaService;
import com.rjconsultores.ventaboletos.service.VigenciaTarifaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

/**
 * 
 * @author rodrigo
 */
@Controller("cambioVigenciaController")
@Scope("prototype")
public class CambioVigenciaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private TarifaService tarifaService;
	@Autowired
	private VigenciaTarifaService vigenciaTarifaService;
	private List<VigenciaTarifa> lsVigenciaTarifa;
	private Combobox cmbVigencia;
	private Combobox cmbNovaVigencia;
	private static Logger log = Logger.getLogger(CambioVigenciaController.class);

	public Combobox getCmbNovaVigencia() {
		return cmbNovaVigencia;
	}

	public void setCmbNovaVigencia(Combobox cmbNovaVigencia) {
		this.cmbNovaVigencia = cmbNovaVigencia;
	}

	public Combobox getCmbVigencia() {
		return cmbVigencia;
	}

	public void setCmbVigencia(Combobox cmbVigencia) {
		this.cmbVigencia = cmbVigencia;
	}

	public List<VigenciaTarifa> getLsVigenciaTarifa() {
		return lsVigenciaTarifa;
	}

	public void setLsVigenciaTarifa(List<VigenciaTarifa> lsVigenciaTarifa) {
		this.lsVigenciaTarifa = lsVigenciaTarifa;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsVigenciaTarifa = vigenciaTarifaService.obtenerTodos();

		super.doAfterCompose(comp);
	}

	public void onClick$btnCambiarVigencia(Event ev) throws InterruptedException {
		cmbVigencia.getSelectedItem();
		cmbNovaVigencia.getSelectedItem();

		VigenciaTarifa vigencia = (VigenciaTarifa) (cmbVigencia.getSelectedItem() != null ? cmbVigencia.getSelectedItem().getValue() : null);
		VigenciaTarifa novaVigencia = (VigenciaTarifa) (cmbNovaVigencia.getSelectedItem() != null ? cmbNovaVigencia.getSelectedItem().getValue() : null);
		List<Tarifa> lsTarifas = tarifaService.buscarPorVigencia(vigencia);

		String msg = lsTarifas.size() + " tarifas. Vigencia " + vigencia + " -> " + novaVigencia;
		
		Integer opcao = Messagebox.show(msg + ". "
				+ Labels.getLabel("cambioVigenciaController.MSGCambiarVigencias"),
				Labels.getLabel("cambioVigenciaController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (opcao.equals(Messagebox.YES)) {
			for (Tarifa tf : lsTarifas) {
				tf.setVigenciaTarifa(novaVigencia);
				Marca marca = tf.getMarca();
				Tramo tramo = tf.getTramo();
				Moneda moneda = tf.getMoneda();
				ClaseServicio claseServicio = tf.getClaseServicio();
				Ruta ruta = tf.getRuta();
				OrgaoConcedente orgaoConcedente = tf.getOrgaoConcedente();

				boolean existe = tarifaService.existe(marca, tramo, moneda, claseServicio, novaVigencia, ruta, orgaoConcedente);
				if (!existe) {
					tarifaService.actualizacion(tf);
				}
			}
		}

		Messagebox.show(
				Labels.getLabel("cambioVigenciaController.MSGCambiarSucesso"),
				Labels.getLabel("cambioVigenciaController.window.title"),
				Messagebox.OK, Messagebox.INFORMATION);

		closeWindow();

	}
	
	public void onClick$btnCopiarVigencia(Event ev) throws InterruptedException {
		cmbVigencia.getSelectedItem();
		cmbNovaVigencia.getSelectedItem();
		
		VigenciaTarifa vigenciaOrigem = (VigenciaTarifa) (cmbVigencia.getSelectedItem() != null ? cmbVigencia.getSelectedItem().getValue() : null);
		VigenciaTarifa vigenciaDestino = (VigenciaTarifa) (cmbNovaVigencia.getSelectedItem() != null ? cmbNovaVigencia.getSelectedItem().getValue() : null);
		
		if(vigenciaOrigem == vigenciaDestino) {
			Messagebox.show(Labels.getLabel("cambioVigenciaController.MSGMesmaVigencias"),
							Labels.getLabel("cambioVigenciaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		
		if(!tarifaService.existeTarifas(vigenciaOrigem)) {
			Messagebox.show(Labels.getLabel("cambioVigenciaController.MSGNingunaVigencias"),
							Labels.getLabel("cambioVigenciaController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
		} else {
		
			boolean possuiTarifas = tarifaService.existeTarifas(vigenciaDestino);
			Integer opcao = Messagebox.YES;
			if(possuiTarifas) {
				opcao = Messagebox.show(Labels.getLabel("cambioVigenciaController.MSGCopiarVigencias"),
										Labels.getLabel("cambioVigenciaController.window.title"),
										Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
			}
			
			if (opcao.equals(Messagebox.YES)) {
				try {
					tarifaService.copiarTarifas(vigenciaOrigem, vigenciaDestino, possuiTarifas);
					Messagebox.show(Labels.getLabel("cambioVigenciaController.MSGCopiarSucesso"),
									Labels.getLabel("cambioVigenciaController.window.title"),
									Messagebox.OK, Messagebox.INFORMATION);
					closeWindow();
				} catch (BusinessException e) {
					Messagebox.show(Labels.getLabel("cambioVigenciaController.MSGCopiarSucesso"),
									Labels.getLabel("cambioVigenciaController.window.title"),
									Messagebox.OK, Messagebox.ERROR);
				}
			}
		
		}
		

	}
	
}
