/*
 * 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.ArrayList;
import java.util.List;

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.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.dao.TarifaOficialDAO;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.exception.BusinessException;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.service.TarifaOficialService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderRutaDesc;

/**
 * 
 * @author Gleimar
 */
@Controller("generarTarifaOrgaoController")
@Scope("prototype")
public class GenerarTarifaOrgaoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private RutaService rutaService;
	@Autowired
	private TarifaOficialService tarifaOficialService;
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private TarifaOficialDAO tarifaOficialDAO;
	
	private List<Ruta> lsRuta;
	private List<OrgaoConcedente> lsOrgaoConcedente;
	private List<Empresa> lsEmpresa;
	private Combobox cmbRuta;
	private Combobox cmbOrgaoConcedente;
	private Combobox cmbEmpresa;
	private Checkbox chkTarifa;
	private Checkbox chkTaxaEmbarque;
	private Checkbox chkArredondarTaxaEmbarque;
	private Checkbox chkSeguro;
	private Checkbox chkZerarTabela;
	private Checkbox chkPedagio;
	private List<Ruta> listSelectedRutas;
	private MyListbox selectedRutasList;
	
	public List<Ruta> getLsRuta() {
		return lsRuta;
	}

	public List<OrgaoConcedente> getLsOrgaoConcedente() {
		return lsOrgaoConcedente;
	}

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


	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();
		lsRuta = rutaService.obtenerTodos();
		lsEmpresa = empresaService.obtenerTodos();
		
		super.doAfterCompose(comp);
		selectedRutasList.setItemRenderer(new RenderRutaDesc());
		listSelectedRutas = new ArrayList<Ruta>();
	}
	
	public void onClick$chkZerarTabela(Event ev) 
	{
		if(chkZerarTabela.isChecked())
		{
			chkTarifa.setChecked(false);
			chkTarifa.setDisabled(true);
			chkTaxaEmbarque.setChecked(false);
			chkTaxaEmbarque.setDisabled(true);
			chkSeguro.setChecked(false);
			chkSeguro.setDisabled(true);
			chkPedagio.setChecked(false);
			chkPedagio.setDisabled(true);
			chkArredondarTaxaEmbarque.setChecked(false);
			chkArredondarTaxaEmbarque.setDisabled(true);
		}else
		{
			chkTarifa.setDisabled(false);
			chkTarifa.setChecked(true);
			chkTaxaEmbarque.setDisabled(false);
			chkSeguro.setDisabled(false);
			chkPedagio.setDisabled(false);
			chkArredondarTaxaEmbarque.setDisabled(false);
			chkArredondarTaxaEmbarque.setChecked(true);
		}
	}

	public void onClick$btnGenerarVigencia(Event ev) throws InterruptedException {
		cmbOrgaoConcedente.getValue();

		List<Ruta> lsRuta = new ArrayList<Ruta>();
		Integer orgaoConcedenteId = null;
		Integer empresaId = null;

		lsRuta = listSelectedRutas;

		if (cmbOrgaoConcedente.getSelectedItem() != null) {
			orgaoConcedenteId = ((OrgaoConcedente) cmbOrgaoConcedente.getSelectedItem().getValue()).getOrgaoConcedenteId();
		}
		
		if (cmbEmpresa.getSelectedItem() != null){
			empresaId = ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getEmpresaId();
		}

		if (orgaoConcedenteId == null){
			int resp = Messagebox.show(
					Labels.getLabel("generarTarifaOrgaoController.MSG.gerarTodosOrgaos"),
					Labels.getLabel("indexController.mniGenerarTarifaOrgao.label"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.NO) {
				return;
			}
		}
		
		if(!chkZerarTabela.isChecked()){
			try {
				
				if (chkTarifa.isChecked()) {
					tarifaOficialService.gerarAtualizarTarifa(lsRuta, orgaoConcedenteId, empresaId);
				}
				
				boolean gerarTabelaZerada = !chkTarifa.isChecked();
				
				if (chkTaxaEmbarque.isChecked()) {
					tarifaOficialService.atualizarTaxaEmbarque(lsRuta, orgaoConcedenteId,gerarTabelaZerada, empresaId);
				}

				if (chkSeguro.isChecked()) {
					tarifaOficialService.atualizarSeguro(lsRuta, orgaoConcedenteId);
				}
				
				if (chkPedagio.isChecked()) {
					tarifaOficialService.atualizarPedagio();
				}

				tarifaOficialService.aplicarArredondamentoTarifa(orgaoConcedenteId, chkArredondarTaxaEmbarque.isChecked());

				long l = tarifaOficialService.obtenerCount();
				
				Messagebox.show(Labels.getLabel("generarTarifaOrgaoController.MSG.suscribirOK", new Object[] { l }),
						Labels.getLabel("indexController.mniGenerarTarifaOrgao.label"),
						Messagebox.OK, Messagebox.INFORMATION);

				} catch (BusinessException e) {
					Messagebox.show(e.getLocalizedMessage(),
							Labels.getLabel("indexController.mniGenerarTarifaOrgao.label"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				}
		}else{
			
			try{
				tarifaOficialService.gerarAtualizarTabelaZerada(lsRuta, orgaoConcedenteId, empresaId);

				Messagebox.show(Labels.getLabel("generarTarifaOrgaoController.MSG.suscribirOK"),
						Labels.getLabel("indexController.mniGenerarTarifaOrgao.label"),
						Messagebox.OK, Messagebox.INFORMATION);
			}catch (BusinessException e) {
				Messagebox.show(e.getLocalizedMessage(),
						Labels.getLabel("indexController.mniGenerarTarifaOrgao.label"),
						Messagebox.OK, Messagebox.EXCLAMATION);
			}
			
		}
		
	}

	public List<Ruta> getListSelectedRutas() {
		return listSelectedRutas;
	}

	public void setListSelectedRutas(List<Ruta> listSelectedRutas) {
		this.listSelectedRutas = listSelectedRutas;
	}
	
	public void onClick$btnAddRuta(Event ev) throws InterruptedException {
		if(cmbRuta.getSelectedItem() != null){
			listSelectedRutas.add((Ruta)cmbRuta.getSelectedItem().getValue());
			selectedRutasList.setData(listSelectedRutas);
			cmbRuta.setSelectedItem(null);
		}
	}
	
	public void onClick$btnRemoveRuta(Event ev) throws InterruptedException {
		Ruta ruta = (Ruta) selectedRutasList.getSelected();
		listSelectedRutas.remove(ruta);
		selectedRutasList.setData(listSelectedRutas);
	}

}
