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

import java.util.Calendar;

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.zk.ui.util.Clients;
import org.zkoss.zul.Button;

import com.rjconsultores.ventaboletos.entidad.Hotel;
import com.rjconsultores.ventaboletos.service.HotelService;
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.MyTextbox;

@Controller("editarHotelController")
@Scope("prototype")
public class EditarHotelController extends MyGenericForwardComposer {

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

	@Autowired
    private HotelService hotelService;
    private Hotel hotel;
    private MyListbox hotelList;
    private Button btnApagar;
    private MyTextbox txtNome;
    private MyTextbox txtCep;
    private MyTextbox txtEndereco;
    private MyTextbox txtNumero;
    private MyTextbox txtComplemento;
    private MyTextbox txtBairro;
    private MyTextbox txtCidade;
    private MyTextbox txtEstado;
    private MyTextbox txtDesctelefone;

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    public Hotel getHotel() {
        return hotel;
    }

    public void setHotel(Hotel hotel) {
        this.hotel = hotel;
    }

    public MyTextbox getTxtNome() {
        return txtNome;
    }

    public void setTxtNome(MyTextbox txtNome) {
        this.txtNome = txtNome;
    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        aplicarMascara();
        hotel = (Hotel) Executions.getCurrent().getArg().get("hotel");
        hotelList = (MyListbox) Executions.getCurrent().getArg().get("hotelList");

        if (hotel.getHotelId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        }

        txtNome.focus();
    }

    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        txtNome.getValue();
        txtBairro.getValue();
        txtCep.getValue();
        txtCidade.getValue();
        txtComplemento.getValue();
        txtEndereco.getValue();
        txtEstado.getValue();
        txtNumero.getValue();
        txtDesctelefone.getValue();

        try {
            hotel.setActivo(Boolean.TRUE);
            hotel.setFecmodif(Calendar.getInstance().getTime());
            hotel.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
			hotel.setDesctelefone(txtDesctelefone.getValue().replaceAll("[^0-9]", ""));

            if (hotel.getHotelId() == null) {
                hotelService.suscribir(hotel);
                hotelList.addItemNovo(hotel);
            } else {
                hotelService.actualizacion(hotel);
                hotelList.updateItem(hotel);
            }

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

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

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

            if (resp == Messagebox.YES) {

                hotelService.borrar(hotel);

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

                hotelList.removeItem(hotel);

                closeWindow();
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }
    
    public void aplicarMascara() {
		Clients.evalJavaScript("jQuery('#" + txtDesctelefone.getUuid()+ "').mask('(99)9999-9999?9')");
	}

	public MyTextbox getTxtCep() {
		return txtCep;
	}

	public void setTxtCep(MyTextbox txtCep) {
		this.txtCep = txtCep;
	}

	public MyTextbox getTxtEndereco() {
		return txtEndereco;
	}

	public void setTxtEndereco(MyTextbox txtEndereco) {
		this.txtEndereco = txtEndereco;
	}

	public MyTextbox getTxtComplemento() {
		return txtComplemento;
	}

	public void setTxtComplemento(MyTextbox txtComplemento) {
		this.txtComplemento = txtComplemento;
	}

	public MyTextbox getTxtBairro() {
		return txtBairro;
	}

	public void setTxtBairro(MyTextbox txtBairro) {
		this.txtBairro = txtBairro;
	}

	public MyTextbox getTxtCidade() {
		return txtCidade;
	}

	public void setTxtCidade(MyTextbox txtCidade) {
		this.txtCidade = txtCidade;
	}

	public MyTextbox getTxtEstado() {
		return txtEstado;
	}

	public void setTxtEstado(MyTextbox txtEstado) {
		this.txtEstado = txtEstado;
	}

	public MyTextbox getTxtNumero() {
		return txtNumero;
	}

	public void setTxtNumero(MyTextbox txtNumero) {
		this.txtNumero = txtNumero;
	}

	public MyTextbox getTxtDesctelefone() {
		return txtDesctelefone;
	}

	public void setTxtDesctelefone(MyTextbox txtDesctelefone) {
		this.txtDesctelefone = txtDesctelefone;
	}
}
