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

import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
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 com.rjconsultores.ventaboletos.entidad.SeguroKm;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.service.SeguroKmService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderSeguroKm;
import org.zkoss.zul.Intbox;

/**
 *
 * @author Administrador
 */
@Controller("editarSeguroKmController")
@Scope("prototype")
public class EditarSeguroKmController extends MyGenericForwardComposer {

    @Autowired
    private SeguroKmService seguroKmService;
    @Autowired
    private OrgaoConcedenteService orgaoConcedenteService;
    private OrgaoConcedente orgao;
    //  private SeguroKm seguroKm;
    private List<SeguroKm> lsSeguroKm;
    private List<OrgaoConcedente> lsOrgaoConcedente;
    private MyListbox seguroKmList;
    private MyComboboxEstandar cmbOrgao;
    private Button btnApagar;
    private Button btnAdicionarSeguroKm;
    private Intbox txtKm;
    private MyTextboxDecimal txtValor;
    private static Logger log = Logger.getLogger(EditarSeguroKmController.class);

    public Button getBtnApagar() {
        return btnApagar;
    }

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

    public Button getBtnAdicionarSeguroKm() {
        return btnAdicionarSeguroKm;
    }

    public void setBtnAdicionarSeguroKm(Button btnAdicionarSeguroKm) {
        this.btnAdicionarSeguroKm = btnAdicionarSeguroKm;
    }

    public List<OrgaoConcedente> getLsOrgaoConcedente() {
        return lsOrgaoConcedente;
    }

    public void setLsOrgaoConcedente(List<OrgaoConcedente> lsOrgaoConcedente) {
        this.lsOrgaoConcedente = lsOrgaoConcedente;
    }

    public List<SeguroKm> getLsSeguroKm() {
        return lsSeguroKm;
    }

    public void setLsSeguroKm(List<SeguroKm> lsSeguroKm) {
        this.lsSeguroKm = lsSeguroKm;
    }

    public MyListbox getSeguroKmList() {
        return seguroKmList;
    }

    public void setSeguroKmList(MyListbox seguroKmList) {
        this.seguroKmList = seguroKmList;
    }

    public OrgaoConcedente getOrgao() {
        return orgao;
    }

    public void setOrgao(OrgaoConcedente orgao) {
        this.orgao = orgao;
    }

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

        lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();

        super.doAfterCompose(comp);

        orgao = (OrgaoConcedente) Executions.getCurrent().getArg().get("orgao");
        //seguroKm = (SeguroKm) Executions.getCurrent().getArg().get("seguroKm");

        seguroKmList.setItemRenderer(new RenderSeguroKm());
        lsSeguroKm = new ArrayList<SeguroKm>();

        if (orgao != null
                && orgao.getOrgaoConcedenteId() != null) {
            lsSeguroKm = seguroKmService.buscarPorOrgao(orgao);
            seguroKmList.setData(lsSeguroKm);
            cmbOrgao.setDisabled(Boolean.TRUE);
            cmbOrgao.setValue(orgao.getDescOrgao());
        }
    }

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

        try {
            if (lsSeguroKm.isEmpty()) {
                Messagebox.show(
                        Labels.getLabel("editarSeguroKmController.MSG.necessaitaInfromar.value"),
                        Labels.getLabel("editarSeguroKmController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
                return;
            }

            for (SeguroKm km : lsSeguroKm) {
                if (km.getSegurokmId() == null) {
                    seguroKmService.suscribir(km);
                }
            }
            Messagebox.show(
                    Labels.getLabel("editarSeguroKmController.MSG.suscribirOK"),
                    Labels.getLabel("editarSeguroKmController.window.title"),
                    Messagebox.OK, Messagebox.INFORMATION);

            closeWindow();


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

        }
    }

//    public void onClick$btnApagar(Event ev) throws InterruptedException {
//        try {
//            int resp = Messagebox.show(
//                    Labels.getLabel("editarSeguroKmController.MSG.borrarPergunta"),
//                    Labels.getLabel("editarSeguroKmController.window.title"),
//                    Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);
//
//            if (resp == Messagebox.YES) {
//
//                seguroKmService.borrar(seguroKm);
//
//                Messagebox.show(
//                        Labels.getLabel("editarSeguroKmController.MSG.borrarOK"),
//                        Labels.getLabel("editarSeguroKmController.window.title"),
//                        Messagebox.OK, Messagebox.INFORMATION);
//
//                seguroKmList.removeItem(seguroKm);
//
//                closeWindow();
//            }
//        } catch (Exception ex) {
//            log.error(ex);
//            Messagebox.show(
//                    Labels.getLabel("MSG.Error"),
//                    Labels.getLabel("editarSeguroKmController.window.title"),
//                    Messagebox.OK, Messagebox.ERROR);
//        }
//    }
    public void onClick$btnAdicionarSeguroKm(Event ev) throws InterruptedException {
        cmbOrgao.getValue();
        txtKm.getValue();
        txtValor.getValue();

        if (lsSeguroKm.isEmpty()) {

            lsSeguroKm = seguroKmService.buscarPorOrgao((OrgaoConcedente) cmbOrgao.getSelectedItem().getValue());
            seguroKmList.setData(lsSeguroKm);
        }

        //ChecandoDuplicado
        boolean existe = false;
        for (SeguroKm km : lsSeguroKm) {
            if (km.getKmate().equals(txtKm.getValue())) {
                existe = true;
            }
        }

        if (existe) {
            Messagebox.show(
                    Labels.getLabel("editarSeguroKmController.MSG.existe"),
                    Labels.getLabel("editarSeguroKmController.window.title"),
                    Messagebox.OK, Messagebox.INFORMATION);
            limparInput();
            return;
        }

        SeguroKm km = new SeguroKm();
        km.setOrgaoconcedente((OrgaoConcedente) cmbOrgao.getSelectedItem().getValue());
        km.setKmate(txtKm.getValue());
        km.setValortaxa(txtValor.getValueDecimal());
        km.setActivo(true);
        km.setFecmodif(Calendar.getInstance().getTime());
        km.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

        lsSeguroKm.add(km);
        seguroKmList.setData(lsSeguroKm);

        cmbOrgao.setDisabled(Boolean.TRUE);
        limparInput();

    }

    private void limparInput() {
        txtKm.setConstraint("");
        txtValor.setConstraint("");
        txtKm.setText("");
        txtValor.setText("");
        txtKm.setConstraint("no empty, no zero, no negative");
        txtValor.setConstraint("no empty, no zero, no negative");
    }

    public void onClick$btnRemoverSeguroKm(Event ev) {
        SeguroKm cd = (SeguroKm) seguroKmList.getSelected();
        if (cd != null) {
            cd.setActivo(Boolean.FALSE);
            cd.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            cd.setFecmodif(Calendar.getInstance().getTime());
            seguroKmService.actualizacion(cd);

            lsSeguroKm.remove(cd);
            seguroKmList.setData(lsSeguroKm);
        }
    }
}
