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

import com.rjconsultores.ventaboletos.entidad.TarjetaFidelidad;
import com.rjconsultores.ventaboletos.service.TarjetaFidelidadService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderTarjetaFidelidadClaves;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Random;
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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Textbox;

/**
 * 
 * @author Shiro
 */
@Controller("editarGeneracionTarjetaSAController")
@Scope("prototype")
public class EditarGeneracionTarjetaSAController extends MyGenericForwardComposer {

	@Autowired
	private TarjetaFidelidadService fidelidadService;
	private TarjetaFidelidad tarjetaFidelidad;
	private MyListbox tarjetaFidelidadList;
	private MyListbox editarTarjetaFidelidadList;
	private Paging pagingFidelidad;
	private List<TarjetaFidelidad> listTf;
	private Textbox txtNomPaquete;
	private Intbox folios;
	private int x2;
	private Random aleatorio = new Random();
	private Button btnApagarGeneracion;
	private Button btnGenerar;
	private Label qtdFolios;
	private static Logger log = Logger.getLogger(EditarGeneracionTarjetaSAController.class);

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);

		tarjetaFidelidad = (TarjetaFidelidad) Executions.getCurrent().getArg().get("tarjetaFidelidad");
		tarjetaFidelidadList = (MyListbox) Executions.getCurrent().getArg().get("tarjetaFidelidadList");

		editarTarjetaFidelidadList.setItemRenderer(new RenderTarjetaFidelidadClaves());

		if (tarjetaFidelidad.getTarjetaFidelidadId() != null) {
			btnApagarGeneracion.setDisabled(true);
			btnGenerar.setDisabled(true);

			qtdFolios.setValue(Labels.getLabel("editarGeneracionTarjetaSAController.folios.value"));
		} else {
			qtdFolios.setValue(Labels.getLabel("editarGeneracionTarjetaSAController.qtdFolios.value"));
		}

		// desabilitado remoção da ListBox
		btnApagarGeneracion.setVisible(false);
		txtNomPaquete.focus();

	}

	public void onClick$btnSalvar(Event ev) throws InterruptedException {

		try {

			if (editarTarjetaFidelidadList.getModel().getSize() == 0) {
				Messagebox.show(Labels.getLabel("editarGeneracionTarjetaSAController.MSG.necessitaTarjeta"),
						Labels.getLabel("editarGeneracionTarjetaSAController.window.title"),
						Messagebox.OK, Messagebox.EXCLAMATION);

				return;
			}

			if (tarjetaFidelidad.getTarjetaFidelidadId() == null) {
				for (int i = 0; i < editarTarjetaFidelidadList.getData().length; i++) {
					fidelidadService.suscribir((TarjetaFidelidad) (editarTarjetaFidelidadList.getData())[i]);
					tarjetaFidelidadList.addItem((TarjetaFidelidad) (editarTarjetaFidelidadList.getData())[i]);
				}
			} else {
				fidelidadService.actualizacion(tarjetaFidelidad);
				tarjetaFidelidadList.updateItem(tarjetaFidelidad);
			}

			Messagebox.show(Labels.getLabel("editarGeneracionTarjetaSAController.MSG.suscribirOK"),
					Labels.getLabel("editarGeneracionTarjetaSAController.window.title"), Messagebox.OK, Messagebox.INFORMATION);

			closeWindow();

		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public int dameEntero() {
		generar();
		return x2;
	}

	public static void salida(String cadena) {
		System.out.println(cadena);
	}

	private void generar() {
		x2 = aleatorio.nextInt(1000000000);
	}

	public void onClick$btnGenerar(Event ev) {
		ArrayList<Integer> uno = new ArrayList<Integer>();
		try {
			double x = folios.getValue();
			// x2 = aleatorio.nextInt();

			while (x > 0) {
				x--;
				dameEntero();
				// salida("Entero aleatorio: " + dameEntero()+ "Nombre = " + txtNomPaquete.getValue());
				uno.add(x2);
			}

			ArrayList<TarjetaFidelidad> tfl = new ArrayList<TarjetaFidelidad>();
			for (Integer f : uno) {
				TarjetaFidelidad tf = new TarjetaFidelidad();
				tf.setActivo(Boolean.TRUE);
				tf.setFecmodif(Calendar.getInstance().getTime());
				tf.setUsuarioId(0);
				tf.setDescGeneracion(txtNomPaquete.getValue());
				tf.setNumTarjeta(f.longValue());
				System.out.println("Numero tarjeta de codigo = " + tf.getNumTarjeta());

				tfl.add(tf);
			}

			editarTarjetaFidelidadList.setData(tfl);
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnApagarGeneracion(Event ev) {
		try {
			TarjetaFidelidad tf = (TarjetaFidelidad) editarTarjetaFidelidadList.getSelected();

			if (tf != null) {
				for (int i = 0; i < editarTarjetaFidelidadList.getData().length; i++) {
					TarjetaFidelidad tfFor = (TarjetaFidelidad) (editarTarjetaFidelidadList.getData())[i];
					if (tfFor.getNumTarjeta().equals(tf.getNumTarjeta())) {
						editarTarjetaFidelidadList.removeItem(tfFor);
					}
				}
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public void onClick$btnApagar(Event ev) {
		try {
			int resp = Messagebox.show(
					Labels.getLabel("editarGeneracionTarjetaSAController.MSG.BorrarPergunta"),
					Labels.getLabel("editarGeneracionTarjetaSAController.window.title"),
					Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

			if (resp == Messagebox.YES) {

				fidelidadService.borrar(tarjetaFidelidad);

				Messagebox.show(
						Labels.getLabel("editarGeneracionTarjetaSAController.MSG.BorrarOK"),
						Labels.getLabel("editarGeneracionTarjetaSAController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);

				tarjetaFidelidadList.removeItem(tarjetaFidelidad);

				closeWindow();
			}
		} catch (Exception ex) {
			log.error(ex);
		}
	}

	public Random getAleatorio() {
		return aleatorio;
	}

	public void setAleatorio(Random aleatorio) {
		this.aleatorio = aleatorio;
	}

	public TarjetaFidelidadService getFidelidadService() {
		return fidelidadService;
	}

	public void setFidelidadService(TarjetaFidelidadService fidelidadService) {
		this.fidelidadService = fidelidadService;
	}

	public MyListbox getTarjetaFidelidadList() {
		return tarjetaFidelidadList;
	}

	public void setTarjetaFidelidadList(MyListbox tarjetaFidelidadList) {
		this.tarjetaFidelidadList = tarjetaFidelidadList;
	}

	public List<TarjetaFidelidad> getListTf() {
		return listTf;
	}

	public void setListTf(List<TarjetaFidelidad> listTf) {
		this.listTf = listTf;
	}

	public Paging getPagingFidelidad() {
		return pagingFidelidad;
	}

	public void setPagingFidelidad(Paging pagingFidelidad) {
		this.pagingFidelidad = pagingFidelidad;
	}

	public TarjetaFidelidad getTarjetaFidelidad() {
		return tarjetaFidelidad;
	}

	public void setTarjetaFidelidad(TarjetaFidelidad tarjetaFidelidad) {
		this.tarjetaFidelidad = tarjetaFidelidad;
	}

	public Textbox getTxtNomPaquete() {
		return txtNomPaquete;
	}

	public void setTxtNomPaquete(Textbox txtNomPaquete) {
		this.txtNomPaquete = txtNomPaquete;
	}

	public MyListbox getEditarTarjetaFidelidadList() {
		return editarTarjetaFidelidadList;
	}

	public void setEditarTarjetaFidelidadList(MyListbox editarTarjetaFidelidadList) {
		this.editarTarjetaFidelidadList = editarTarjetaFidelidadList;
	}
}
