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

import java.util.HashMap;
import java.util.Map;

import javax.sql.DataSource;

import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;

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.Radio;

import com.rjconsultores.ventaboletos.entidad.EnderecoApanhe;
import com.rjconsultores.ventaboletos.enums.LocalEnderecoApanhe;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioVendaPacoteVoucher;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.EnderecoApanheService;
import com.rjconsultores.ventaboletos.web.utilerias.MyDatebox;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;

@Controller("editarManutencaoPacoteController")
@Scope("prototype")
public class EditarManutencaoPacoteController extends MyGenericForwardComposer {

	private static Logger log = Logger.getLogger(EditarManutencaoPacoteController.class);
	
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private DataSource dataSourceRead;

	@Autowired
	private EnderecoApanheService enderecoApanheService;
	
	private EnderecoApanhe enderecoApanhe;
    private EnderecoApanhe enderecoApanheOriginal;
    private Button btnApagar;

    private MyListbox enderecoApanheList;
    private MyTextbox txtDeschotel;
    private MyTextbox txtCep;
    private MyTextbox txtEndereco;
    private MyTextbox txtNumero;
    private MyTextbox txtComplemento;
    private MyTextbox txtBairro;
    private MyTextbox txtCidade;
    private Radio rdApanharEmCasa;
    private Radio rdHotel;
    private Radio rdRegiaoMetropolitana;
    private Radio rdNenhum;
    private MyTextbox txtNumoperacion;
    private MyDatebox dtDataPacote;

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        enderecoApanhe = (EnderecoApanhe) Executions.getCurrent().getArg().get("enderecoApanhe");
        enderecoApanheList = (MyListbox) Executions.getCurrent().getArg().get("enderecoApanheList");
        if(LocalEnderecoApanhe.APANHE_EM_CASA.equals(enderecoApanhe.getLocalEnderecoApanhe())) {
        	getRdApanharEmCasa().setChecked(true);
        } else if(LocalEnderecoApanhe.HOTEL.equals(enderecoApanhe.getLocalEnderecoApanhe())) {
        	getRdHotel().setChecked(true);
        } else if(LocalEnderecoApanhe.REGIAO_METROPOLITANA.equals(enderecoApanhe.getLocalEnderecoApanhe())) {
        	getRdRegiaoMetropolitana().setChecked(true);
        } else if(LocalEnderecoApanhe.NENHUM.equals(enderecoApanhe.getLocalEnderecoApanhe())) {
        	getRdNenhum().setChecked(true);
        }
        enderecoApanheOriginal = (EnderecoApanhe) enderecoApanhe.clone();
    }

    public void onClick$btnSalvarEnderecoApanhe(Event ev) throws InterruptedException {
    	txtDeschotel.getValue();
        txtBairro.getValue();
        txtCep.getValue();
        txtCidade.getValue();
        txtComplemento.getValue();
        txtEndereco.getValue();
        txtNumero.getValue();
        rdApanharEmCasa.getValue();
        rdHotel.getValue();
        rdRegiaoMetropolitana.getValue();
        rdNenhum.getValue();

        try {
        	enderecoApanhe.setEnderecoapanheId(null);
        	if(rdApanharEmCasa.isChecked()) {
        		enderecoApanhe.setLocalEnderecoApanhe(LocalEnderecoApanhe.APANHE_EM_CASA);
        	} else if(rdHotel.isChecked()) {
        		enderecoApanhe.setLocalEnderecoApanhe(LocalEnderecoApanhe.HOTEL);
        	} else if(rdRegiaoMetropolitana.isChecked()) {
        		enderecoApanhe.setLocalEnderecoApanhe(LocalEnderecoApanhe.REGIAO_METROPOLITANA);
        	} else if(rdNenhum.isChecked()) {
        		enderecoApanhe.setLocalEnderecoApanhe(LocalEnderecoApanhe.NENHUM);
        	}
        	enderecoApanheService.suscribir(enderecoApanhe);
        	
            /* Desativando o endereco apanhe original */
        	enderecoApanheService.borrar(enderecoApanheOriginal);
        	enderecoApanheList.removeItem(enderecoApanheOriginal);

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

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

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

            if (resp == Messagebox.YES) {

                enderecoApanheService.borrar(enderecoApanhe);

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

                enderecoApanheList.removeItem(enderecoApanhe);

                closeWindow();
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }
    
    public void onClick$btnEmitirVoucherVendaPacote(Event ev) {
    	try {
    		Map<String, Object> parametros = new HashMap<String, Object>();
    		parametros.put("vendapacoteId", enderecoApanhe.getVendaPacote().getVendapacoteId());
    		
			JasperReport subReportePacoteTarifasVouchers = (JasperReport) JRLoader.loadObject(this.getClass().getResourceAsStream("/com/rjconsultores/ventaboletos/relatorios/templates/SubReportePacoteTarifasVouchers.jasper"));
			parametros.put("subReportePacoteTarifasVouchers", subReportePacoteTarifasVouchers);
			
			JasperReport subReporteItemAdicionalVouchers = (JasperReport) JRLoader.loadObject(this.getClass().getResourceAsStream("/com/rjconsultores/ventaboletos/relatorios/templates/SubReporteItemAdicionalVouchers.jasper"));
			parametros.put("subReporteItemAdicionalVouchers", subReporteItemAdicionalVouchers);
    		
    		Relatorio relatorio = new RelatorioVendaPacoteVoucher(parametros, dataSourceRead.getConnection(), "SubReportePacoteTarifasVouchers", "SubReporteItemAdicionalVouchers");
    		
    		Map<String, Object> args = new HashMap<String, Object>();
    		args.put("relatorio", relatorio);

    		openWindow("/component/reportView.zul",
    				   Labels.getLabel("RelatorioVendaPacoteVoucher.window.title"), args, MODAL);
    	} catch (Exception ex) {
            log.error(ex);
        }
    }

	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 getTxtNumero() {
		return txtNumero;
	}

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

	public EnderecoApanhe getEnderecoApanhe() {
		return enderecoApanhe;
	}

	public void setEnderecoApanhe(EnderecoApanhe enderecoApanhe) {
		this.enderecoApanhe = enderecoApanhe;
	}

	public MyTextbox getTxtDeschotel() {
		return txtDeschotel;
	}

	public void setTxtDeschotel(MyTextbox txtDeschotel) {
		this.txtDeschotel = txtDeschotel;
	}

	public Radio getRdApanharEmCasa() {
		return rdApanharEmCasa;
	}

	public void setRdApanharEmCasa(Radio rdApanharEmCasa) {
		this.rdApanharEmCasa = rdApanharEmCasa;
	}

	public Radio getRdHotel() {
		return rdHotel;
	}

	public void setRdHotel(Radio rdHotel) {
		this.rdHotel = rdHotel;
	}

	public Radio getRdRegiaoMetropolitana() {
		return rdRegiaoMetropolitana;
	}

	public void setRdRegiaoMetropolitana(Radio rdRegiaoMetropolitana) {
		this.rdRegiaoMetropolitana = rdRegiaoMetropolitana;
	}

	public Radio getRdNenhum() {
		return rdNenhum;
	}

	public void setRdNenhum(Radio rdNenhum) {
		this.rdNenhum = rdNenhum;
	}

	public MyTextbox getTxtNumoperacion() {
		return txtNumoperacion;
	}

	public void setTxtNumoperacion(MyTextbox txtNumoperacion) {
		this.txtNumoperacion = txtNumoperacion;
	}

	public MyDatebox getDtDataPacote() {
		return dtDataPacote;
	}

	public void setDtDataPacote(MyDatebox dtDataPacote) {
		this.dtDataPacote = dtDataPacote;
	}
}
