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

import java.util.Calendar;
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.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;

import com.rjconsultores.ventaboletos.entidad.Hotel;
import com.rjconsultores.ventaboletos.entidad.PrecoApanhe;
import com.rjconsultores.ventaboletos.service.HotelService;
import com.rjconsultores.ventaboletos.service.PrecoApanheService;
import com.rjconsultores.ventaboletos.utilerias.BigDecimalUtil;
import com.rjconsultores.ventaboletos.utilerias.LocaleUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxCiudad;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxColonia;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;

@Controller("editarPrecoApanheController")
@Scope("prototype")
public class EditarPrecoApanheController extends MyGenericForwardComposer {

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

	@Autowired
    private PrecoApanheService precoApanheService;
	
	@Autowired
	private HotelService hotelService;
	
    private PrecoApanhe precoApanhe;
    private MyListbox precoApanheList;
    private Button btnApagar;
    private MyTextboxDecimal txtPreco;
    
    private Combobox cmbHotel;
    private MyComboboxColonia cmbColonia;
    private MyComboboxCiudad cmbCiudad;
    
    private List<Hotel> lsHotel;

    public Button getBtnApagar() {
        return btnApagar;
    }

    public void setBtnApagar(Button btnApagar) {
        this.btnApagar = btnApagar;
    }

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

        precoApanhe = (PrecoApanhe) Executions.getCurrent().getArg().get("precoApanhe");
        precoApanheList = (MyListbox) Executions.getCurrent().getArg().get("precoApanheList");
        
        lsHotel = hotelService.obtenerTodos();

        if (precoApanhe.getPrecoapanheId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        }

        if(precoApanhe.getPreco() != null) {
        	txtPreco.setValue(BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(precoApanhe.getPreco(), LocaleUtil.getLocale()));
        }

    }

	public void onClick$btnSalvar(Event ev) throws InterruptedException {
        try {
        	txtPreco.getValue();
        	cmbCiudad.getValue();
        	cmbColonia.getValue();
        	cmbHotel.getValue();
        	
        	if(verificarHotelColoniaCiudadInformado()) {
        		Messagebox.show(
                        Labels.getLabel("editarPrecoApanheController.error.verificarHotelColoniaCiudadInformado.label"),
                        Labels.getLabel("editarPrecoApanheController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);
        		return;
        	}
        	
            precoApanhe.setActivo(Boolean.TRUE);
            precoApanhe.setFecmodif(Calendar.getInstance().getTime());
            precoApanhe.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            precoApanhe.setPreco(txtPreco.getValueDecimal());

            if (precoApanhe.getPrecoapanheId() == null) {
                precoApanheService.suscribir(precoApanhe);
                precoApanheList.addItemNovo(precoApanhe);
            } else {
                precoApanheService.actualizacion(precoApanhe);
                precoApanheList.updateItem(precoApanhe);
            }

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

            closeWindow();
        } catch (Exception ex) {
            log.error("editarPrecoApanheController: " + ex);
            Messagebox.show(
                    Labels.getLabel("MSG.Error"),
                    Labels.getLabel("editarPrecoApanheController.window.title"),
                    Messagebox.OK, Messagebox.ERROR);
        }
    }

    private boolean verificarHotelColoniaCiudadInformado() {
    	int qtdeInformado = 0;
    	qtdeInformado += (precoApanhe.getHotel() != null ? 1 : 0);
    	qtdeInformado += (precoApanhe.getColonia() != null ? 1 : 0);
    	qtdeInformado += (precoApanhe.getCiudad() != null ? 1 : 0);
    	
    	return qtdeInformado > 1;
	}

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

            if (resp == Messagebox.YES) {

                precoApanheService.borrar(precoApanhe);

                Messagebox.show(
                        Labels.getLabel("editarPrecoApanheController.MSG.borrarOK"),
                        Labels.getLabel("editarPrecoApanheController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                precoApanheList.removeItem(precoApanhe);

                closeWindow();
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }
    
	public PrecoApanhe getPrecoApanhe() {
		return precoApanhe;
	}

	public void setPrecoApanhe(PrecoApanhe precoApanhe) {
		this.precoApanhe = precoApanhe;
	}

	public List<Hotel> getLsHotel() {
		return lsHotel;
	}

	public void setLsHotel(List<Hotel> lsHotel) {
		this.lsHotel = lsHotel;
	}

	public Combobox getCmbHotel() {
		return cmbHotel;
	}

	public void setCmbHotel(Combobox cmbHotel) {
		this.cmbHotel = cmbHotel;
	}

	public MyComboboxColonia getCmbColonia() {
		return cmbColonia;
	}

	public void setCmbColonia(MyComboboxColonia cmbColonia) {
		this.cmbColonia = cmbColonia;
	}

	public MyComboboxCiudad getCmbCiudad() {
		return cmbCiudad;
	}

	public void setCmbCiudad(MyComboboxCiudad cmbCiudad) {
		this.cmbCiudad = cmbCiudad;
	}

	public MyTextboxDecimal getTxtPreco() {
		return txtPreco;
	}

	public void setTxtPreco(MyTextboxDecimal txtPreco) {
		this.txtPreco = txtPreco;
	}
}
