/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cosmodas.usuarios;

import com.cosmodas.FacadeCosmos.WcGruposUsuariosFacadeLocal;
import com.cosmodas.FacadeCosmos.WcOpcionesFacadeLocal;
import com.cosmodas.FacadeCosmos.WcOpcionesGruposFacadeLocal;
import com.cosmodas.EntCosmos.WcGruposUsuarios;
import com.cosmodas.EntCosmos.WcOpciones;
import com.cosmodas.EntCosmos.WcOpcionesGrupos;
import com.cosmodas.EntCosmos.WcOpcionesGruposPK;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.inject.Named;
import javax.inject.Inject;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.TransferEvent;
import org.primefaces.event.UnselectEvent;
import org.primefaces.model.DualListModel;

/**
 * @author obper
 */
@Named
@ManagedBean
@javax.faces.view.ViewScoped
public class bgrupos implements Serializable {

    @EJB
    private WcGruposUsuariosFacadeLocal wcgfl;
    @EJB
    private WcOpcionesFacadeLocal wcofl;
    @EJB
    private WcOpcionesGruposFacadeLocal wcogfl;

    private DualListModel<WcOpciones> opciones;
    private List<WcGruposUsuarios> grupos;
    private Boolean nuevoCheck;
    private List<WcOpciones> opcionesPorGrupoFrom;
    private List<WcOpciones> opcionesPorGrupoOF;
    private List<WcOpciones> opcionesPorGrupoTo;
    @Inject
    private WcGruposUsuarios selectGrupo, nuevoGrupo, selectGrupo2;

    public WcGruposUsuarios getSelectGrupo2() {
        return selectGrupo2;
    }

    public void setSelectGrupo2(WcGruposUsuarios selectGrupo2) {
        this.selectGrupo2 = selectGrupo2;
    }

    public Boolean getNuevoCheck() {
        return nuevoCheck;
    }

    public void setNuevoCheck(Boolean nuevoCheck) {
        this.nuevoCheck = nuevoCheck;
    }

    public WcGruposUsuarios getNuevoGrupo() {
        return nuevoGrupo;
    }

    public void setNuevoGrupo(WcGruposUsuarios nuevoGrupo) {
        this.nuevoGrupo = nuevoGrupo;
    }

    public List<WcGruposUsuarios> getGrupos() {
        return grupos;
    }

    public void setGrupos(List<WcGruposUsuarios> grupos) {
        this.grupos = grupos;
    }

    public DualListModel<WcOpciones> getOpciones() {
        return opciones;
    }

    public void setOpciones(DualListModel<WcOpciones> opciones) {
        this.opciones = opciones;
    }

    public WcGruposUsuarios getSelectGrupo() {
        return selectGrupo;
    }

    public List<WcOpciones> getOpcionesPorGrupoFrom() {
        return opcionesPorGrupoFrom;
    }

    public void setOpcionesPorGrupoFrom(List<WcOpciones> opcionesPorGrupoFrom) {
        this.opcionesPorGrupoFrom = opcionesPorGrupoFrom;
    }

    public List<WcOpciones> getOpcionesPorGrupoTo() {
        return opcionesPorGrupoTo;
    }

    public void setOpcionesPorGrupoTo(List<WcOpciones> opcionesPorGrupoTo) {
        this.opcionesPorGrupoTo = opcionesPorGrupoTo;
    }

    public List<WcOpciones> getOpcionesPorGrupoOF() {
        return opcionesPorGrupoOF;
    }

    public void setOpcionesPorGrupoOF(List<WcOpciones> opcionesPorGrupoOF) {
        this.opcionesPorGrupoOF = opcionesPorGrupoOF;
    }

    public void setSelectGrupo(WcGruposUsuarios selectGrupo) {
        this.selectGrupo = selectGrupo;
        opcionesPorGrupoFrom = new ArrayList<>();
        opcionesPorGrupoTo = new ArrayList<>();
        this.opcionesPorGrupoFrom = wcofl.findAll();
        try {
            for (WcOpciones opcs : selectGrupo.getWcOpcionesList()) {
                opcionesPorGrupoTo.add(opcs);
            }
        } catch (Exception e) {
        }

        for (WcOpciones opso : opcionesPorGrupoTo) {
            opcionesPorGrupoFrom.remove(opso);
        }
        this.opciones = new DualListModel<>(opcionesPorGrupoFrom, opcionesPorGrupoTo);
    }

    @PostConstruct
    public void init() {
        this.nuevoCheck = false;
        this.grupos = wcgfl.findAll();
        this.opcionesPorGrupoFrom = wcofl.findAll();
        this.opcionesPorGrupoOF = wcofl.findAll();
        this.opcionesPorGrupoTo = new ArrayList<>();
        this.opciones = new DualListModel<>(opcionesPorGrupoFrom, opcionesPorGrupoTo);
    }

    public String validaTipoGrupo(boolean tipogrupo) {
        String rs = "";
        try {
            rs = tipogrupo ? "administrador" : "normal";
        } catch (Exception e) {
        }

        return rs;
    }

    public String validaStatusUsuario(int tipogrupo) {

        String rs = "";

        return rs;
    }

    public void mensajeTipoUsuario(boolean tipogrupo) {
        try {

            String rs = tipogrupo ? "Administrador" : "Normal";
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Usuario " + rs));
        } catch (Exception e) {
        }

    }

    public void nuevosUs() {
        System.out.println("hola dex");
    }

    public void mensajeStatusUsuario(boolean tipogrupo) {
        try {
            String rs = tipogrupo ? "Activado" : "Desactivado";
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Grupo " + rs));
        } catch (Exception e) {
        }

    }

    public bgrupos() {
    }

    public void onTransfer(TransferEvent event) {
        WcOpcionesGrupos wcOp = new WcOpcionesGrupos();
        WcOpcionesGruposPK wcOpPK = new WcOpcionesGruposPK();
        String tipoGestion = "";
        StringBuilder builder = new StringBuilder();
        WcOpciones ojeto = new WcOpciones();
        for (Object item : event.getItems()) {
            ojeto = (WcOpciones) item;

            wcOpPK.setIdOpcion(ojeto.getIdOpcion());
            wcOpPK.setIdGrupo(selectGrupo.getIdGruposUsuarios());
            wcOp.setOtros(2);
            wcOp.setWcOpcionesGruposPK(wcOpPK);

            if (event.isAdd()) {
                wcogfl.create(wcOp);
                tipoGestion = "Opcion Agregada ";
            } else if (event.isRemove()) {
                wcogfl.remove(wcogfl.find(wcOpPK));
                tipoGestion = "Opcion Eliminada ";
            }
            builder.append(((WcOpciones) item).getNombreOpcion()).append("<br />");
            ;
        }

        FacesMessage msg = new FacesMessage();
        msg.setSeverity(FacesMessage.SEVERITY_INFO);
        msg.setSummary(tipoGestion);
        msg.setDetail(builder.toString());

        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

    public void onSelect(SelectEvent event) {
        FacesContext context = FacesContext.getCurrentInstance();
        // context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Item Selected", event.getObject().toString()));
    }

    public void onUnselect(UnselectEvent event) {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Item Unselected", event.getObject().toString()));
    }

    public void onReorder() {
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "List Reordered", null));
    }

    public void guardarNuevoGrupo(WcGruposUsuarios io) {
        try {

            io.setAccionGruposUsuarios(1);
            io.setTipoGruposUsuarios(nuevoCheck);
            wcgfl.create(io);

            FacesMessage msg = new FacesMessage("Nuevo Grupo Creado", nuevoGrupo.getNombreGruposUsuarios());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (Exception e) {
            FacesMessage msg = new FacesMessage("Error de Creado", nuevoGrupo.getNombreGruposUsuarios());
            FacesContext.getCurrentInstance().addMessage(null, msg);
            System.out.println("error " + e);
        }
        nuevoGrupo = new WcGruposUsuarios();
    }

    public void editarNuevoGrupo(WcGruposUsuarios io) {
        try {

            io.setAccionGruposUsuarios(1);
            // io.setTipoGruposUsuarios(nuevoCheck);
            wcgfl.edit(io);

            FacesMessage msg = new FacesMessage("Editado Grupo Creado", nuevoGrupo.getNombreGruposUsuarios());
            FacesContext.getCurrentInstance().addMessage(null, msg);
        } catch (Exception e) {
            FacesMessage msg = new FacesMessage("Error de Creado", nuevoGrupo.getNombreGruposUsuarios());
            FacesContext.getCurrentInstance().addMessage(null, msg);
            System.out.println("error " + e);
        }

        selectGrupo = new WcGruposUsuarios();
    }

    public String validaColor(boolean tipoMenu, boolean estadoOpcion) {
        String rs = "";
        if (!tipoMenu) {
            rs = "#0404B4";
        }
        if (!estadoOpcion && !tipoMenu) {
            rs = "#009688";
        }
        return rs;
    }

}
