/*
 * Acesso.java
 *
 * Created on Oct 15, 2008, 9:49:21 AM
 */
 
package analiseacidentestrabalho;

import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.DropDown;
import com.sun.rave.web.ui.component.StaticText;
import db.AnalisesDataProvider;
import db.UtilizadoresDataProvider;
import global.Global;
import javax.faces.FacesException;
import javax.faces.component.html.HtmlPanelGrid;
import javax.faces.context.FacesContext;
import utils.JSFUtils;
import utils.Utils;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 *
 * @author lluis
 */
public class Acesso extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */
    private void _init() throws Exception {
    }
    private StaticText stWelcome = new StaticText();

    public StaticText getStWelcome() {
        return stWelcome;
    }

    public void setStWelcome(StaticText st) {
        this.stWelcome = st;
    }
    private DropDown drpEstabelecimentos = new DropDown();

    public DropDown getDrpEstabelecimentos() {
        return drpEstabelecimentos;
    }

    public void setDrpEstabelecimentos(DropDown dd) {
        this.drpEstabelecimentos = dd;
    }
    private HtmlPanelGrid gridEstabelecimento = new HtmlPanelGrid();

    public HtmlPanelGrid getGridEstabelecimento() {
        return gridEstabelecimento;
    }

    public void setGridEstabelecimento(HtmlPanelGrid hpg) {
        this.gridEstabelecimento = hpg;
    }

    // </editor-fold>

    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public Acesso() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     * 
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();
        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here
        
        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();
        } catch (Exception e) {
            log("Acesso Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e: new FacesException(e);
        }
        
        // </editor-fold>
        // Perform application initialization that must complete
        // *after* managed components are initialized
        // TODO - add your own initialization code here
	if (!getSessionBean1().isLoggedIn()) {
	    try {
		getExternalContext().redirect("Login.jsp");
	    } catch(Exception e) {  
	    // . . .  handle exception . . .              
	    }
	}	        
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    public void prerender() {
         Utilizador u = getSessionBean1().getCurrentUser();
         //String nomeUnicode = Utils.textToUnicode(u.getNome());
         //System.out.println("NOME UNICODE : " + nomeUnicode);
         String nomeHtml = Utils.unicodeToHTML( u.getNome() );
         stWelcome.setText("Bem vindo(a) " + nomeHtml);

         if(u.getTipo().intValue() == Global.TIPO_UTILIZADOR_GESTOR)
         {
            initializeEstabelecimentos();
         }
         else
         {
             gridEstabelecimento.setRendered(false);
         }

    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     * 
     */
     
    public void destroy() {
    }
    
    /**
     * <p>Return a reference to the scoped data bean.</p>
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1)getBean("SessionBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1)getBean("RequestBean1");
    }

    /**
     * <p>Return a reference to the scoped data bean.</p>
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1)getBean("ApplicationBean1");
    }         
     


    public String lnkAnalisesAcidente_action() {
        // TODO: Replace with your code
        return null;
    }

    public String lnkNewUser_action() {
        // TODO: Replace with your code
        return null;
    }

    public String lnkEditUser_action() {
        // TODO: Replace with your code
        return null;
    }

    public String lnkAjuda_action() {
        // TODO: Replace with your code
        return null;
    }

    public String lnkLogout_action() {
        // TODO: Replace with your code
        FacesContext fc = getFacesContext();
        try
        {
            JSFUtils.logout(fc);                    
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return "login";
    }

    public String lnkAnalises_action() {
        // TODO: Replace with your code
        Utilizador u = getSessionBean1().getCurrentUser();
        UtilizadoresDataProvider udp = new UtilizadoresDataProvider();
        try
        {
            Integer permissao = udp.getPermissionCode(u.getId()); 
            switch(permissao.intValue())
            {
                case 1: //seguranca
                    return "form_seguranca";
                case 2: //rh
                    return "form_rh";
                case 3: //hs
                    return "form_hs";
                case 6: //gestor
                    Integer estabelecimento = null;
                    if(u.getTipo().intValue() == Global.TIPO_UTILIZADOR_GESTOR)
                    {
                       estabelecimento = (Integer) drpEstabelecimentos.getSelected();
            //           if(estabelecimento.intValue() == -1)
            //           {
            //               getSessionBean1().setMsg("Falta estabelecimento!");
            //               return null;
            //           }
            //           else
            //           {
            //               u.setEstabelecimento(estabelecimento_outro);
                       u.setEstabelecimento_gestor(estabelecimento);
                    }
                    return "form_gestor";
                case 7: //dir ger rh
                    return "form_dir_ger_rh";
                case 8: //dir_siprp
                    return "form_dir_siprp";                                          
                default:
                    return "gestor";                
            }            
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            return "gestor";               
        }


    }

    public String lnkPlanos_action() {
        // TODO: Replace with your code
        
        Utilizador u = getSessionBean1().getCurrentUser();
//        String curUser = "?user=" + u.getId().toString();        
        FacesContext fc = getFacesContext().getCurrentInstance();

        Integer estabelecimento = null;
        if(u.getTipo().intValue() == Global.TIPO_UTILIZADOR_GESTOR)
        {
           estabelecimento = (Integer) drpEstabelecimentos.getSelected();
//           if(estabelecimento.intValue() == -1)
//           {
//               getSessionBean1().setMsg("Falta estabelecimento!");
//               return null;
//           }
//           else
//           {
//               u.setEstabelecimento(estabelecimento_outro);
           u.setEstabelecimento_gestor(estabelecimento);
        }


        Global.redirectToPlanos(fc, u);
        
//        FacesContext fc = getFacesContext().getCurrentInstance();
//        Utilizador u = getSessionBean1().getCurrentUser();
//        String curUser = "?user=" + u.getId().toString();
//        try
//        {
//            JSFUtils.redirect(fc, Global.PLANOS_ACTUACAO_URL + curUser);            
//        }
//        catch(Exception ex)
//        {
//            ex.printStackTrace();
//        }

        return null;
    }

    private void initializeEstabelecimentos()
    {
        AnalisesDataProvider adp = new AnalisesDataProvider();
       try
       {
                com.sun.rave.web.ui.model.Option[] listGestorOptions = adp.getEstabelecimentosGestorList( getSessionBean1().getCurrentUser().getEmpresa_id(), new Boolean(true));
                //listGestorOptions[0].setLabel("-Seleccionar-");


            getSessionBean1().setEstabelecimentosGestorOptions( listGestorOptions );
            drpEstabelecimentos.setSelected(new Integer(0));
       }
       catch(Exception ex)
       {
           ex.printStackTrace();
       }
    }
    
}

