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

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Hibernate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;

import com.rjconsultores.ventaboletos.entidad.PricingEspecifico;
import com.rjconsultores.ventaboletos.entidad.PricingEspecificoOcupacion;
import com.rjconsultores.ventaboletos.service.PricingEspecificoService;
import com.rjconsultores.ventaboletos.utilerias.BigDecimalUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;

@Controller("editarPricingEspecificoOcupacionController")
@Scope("prototype")
public class EditarPricingEspecificoOcupacionController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(EditarPricingEspecificoOcupacionController.class);

	private PricingEspecifico pricingEspecifico;
	private PricingEspecificoOcupacion pricingEspecificoOcupacion;
	private MyListbox pricingListEspOcupacion;

	private MyTextboxDecimal tarifa;
	private MyTextboxDecimal ocupacioninicial;
	private MyTextboxDecimal ocupacionfinal;
	
	private Boolean isEdicao;
	
	@Autowired
	private PricingEspecificoService pricingEspecificoService;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		pricingEspecifico = (PricingEspecifico) Executions.getCurrent().getArg().get("pricingEspecifico");
		pricingEspecificoOcupacion = (PricingEspecificoOcupacion) Executions.getCurrent().getArg().get("pricingEspecificoOcupacion");
		pricingListEspOcupacion = (MyListbox) Executions.getCurrent().getArg().get("pricingListEspOcupacion");
		isEdicao = (Boolean) Executions.getCurrent().getArg().get("isEdicao");
			
		super.doAfterCompose(comp);
		Locale locale = new Locale("pt", "BR");
	
		if (pricingEspecificoOcupacion.getTarifa() != null) {
			tarifa.setValue(pricingEspecificoOcupacion.getTarifa() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getTarifa(), locale));
			ocupacioninicial.setValue(pricingEspecificoOcupacion.getOcupacioninicial() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getOcupacioninicial(), locale));
			ocupacionfinal.setValue(pricingEspecificoOcupacion.getOcupacionfinal() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getOcupacionfinal(), locale));
		}
	}

	public void onClick$btnAdicionarPricingEspOcup(Event ev) throws Exception {
		tarifa.getValue();
		ocupacioninicial.getValue();
		ocupacionfinal.getValue();

		try {
			if (pricingEspecificoOcupacion.getPricingEspecificoOcupacionId() == null) {
				pricingEspecificoOcupacion = new PricingEspecificoOcupacion();
			}

			pricingEspecificoOcupacion.setTarifa(tarifa.getValueDecimal());
			pricingEspecificoOcupacion.setOcupacioninicial(ocupacioninicial.getValueDecimal());
			pricingEspecificoOcupacion.setOcupacionfinal(ocupacionfinal.getValueDecimal());
			pricingEspecificoOcupacion.setPricingEspecifico(pricingEspecifico);

			pricingEspecificoOcupacion.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			pricingEspecificoOcupacion.setFecmodif(Calendar.getInstance().getTime());
			pricingEspecificoOcupacion.setActivo(true);
			
			if (pricingEspecifico != null && pricingEspecifico.getPricingespecificoId() != null) {
				pricingEspecifico = pricingEspecificoService.obtenerID(pricingEspecifico.getPricingespecificoId().longValue());
			}
			Hibernate.initialize(pricingEspecifico);
			Hibernate.initialize(pricingEspecificoOcupacion);
		
			List<PricingEspecificoOcupacion> peoList = null;
			if (pricingEspecifico.getPricingEspecificoOcupacionsList() == null || pricingEspecifico.getPricingEspecificoOcupacionsList().isEmpty()) {
				peoList = new ArrayList<PricingEspecificoOcupacion>();
			} else {
				peoList = pricingEspecifico.getPricingEspecificoOcupacionsList();
			}

			if (pricingEspecificoOcupacion.getPricingEspecificoOcupacionId() != null && peoList.contains(pricingEspecificoOcupacion)) {
				int index = peoList.indexOf(pricingEspecificoOcupacion);
				if(index >= 0) {
					peoList.set(index, pricingEspecificoOcupacion);
				}
			} else {
				peoList.add(pricingEspecificoOcupacion);
			}
			
			pricingEspecifico.setPricingEspecificoOcupacionsList(peoList);

			if(isEdicao){
				pricingListEspOcupacion.updateItem(pricingEspecificoOcupacion);
			} else {
				pricingListEspOcupacion.addItemNovo(pricingEspecificoOcupacion);
			}

			closeWindow();

		} catch (Exception ex) {
			log.error("Erro ao adicionar pricing Pricing Especifico Ocupacion: ", ex);
		}
	}
	
	public MyTextboxDecimal getTarifa() {
		return tarifa;
	}

	public void setTarifa(MyTextboxDecimal tarifa) {
		this.tarifa = tarifa;
	}

	public MyTextboxDecimal getOcupacioninicial() {
		return ocupacioninicial;
	}

	public void setOcupacioninicial(MyTextboxDecimal ocupacioninicial) {
		this.ocupacioninicial = ocupacioninicial;
	}

	public MyTextboxDecimal getOcupacionfinal() {
		return ocupacionfinal;
	}

	public void setOcupacionfinal(MyTextboxDecimal ocupacionfinal) {
		this.ocupacionfinal = ocupacionfinal;
	}

}
