/*
 * UtilizadoresDataProvider.java
 *
 * Created on September 20, 2007, 10:03 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package db;

import analiseacidentestrabalho.Medico;
import analiseacidentestrabalho.Permissao;
import analiseacidentestrabalho.TecnicoSaude;
import analiseacidentestrabalho.Utilizador;
import com.sun.rave.web.ui.model.Option;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.ListIterator;
import utils.Utils;

/**
 *
 * @author lluis
 */
public class UtilizadoresDataProvider {
    
    /** Creates a new instance of UtilizadoresDataProvider */
    public UtilizadoresDataProvider() {
    }
    
    public Integer getMaxUserId()
    {
        Statement st = createStatement();
        String sql = "SELECT max(utilizadores.id)+1 AS MAXUSERID FROM utilizadores";
        try
        {
            ResultSet rs = st.executeQuery(sql);
            rs.first();
            Integer newId = new Integer(rs.getInt("MAXUSERID"));
            if(newId.intValue() == 0)
            {
                newId = new Integer(1);
            }
            return newId;            
        }
        catch(Exception ex)
        {
            ex.printStackTrace();            
            return new Integer(1);
        }
    }  
    
    public Integer createNewUtilizador(Utilizador u) throws Exception
    {
        Statement st = createStatement();
        Integer newUserId = getMaxUserId();	
	
        String sql = "INSERT INTO utilizadores (id, login, password, email, empresa_id, estabelecimento_id, administrador, tipo, numero_cedula, cap, nome, medico_id, funcionario_hst_id, activo) VALUES (" + newUserId  + ", '" + u.getLogin() + "', '" + u.getPassword() + "', '" + u.getEmail() + "', " + u.getEmpresa_id() + ", " + u.getEstabelecimento_id() + ", '" + u.getAdministrador() + "', " + u.getTipo() + ", '" + u.getNumero_cedula() + "', '" + u.getCap() + "', '" + u.getNome() + "', " + u.getMedico_id() + ", " + u.getFuncionario_hst_id() + ", '" + u.getActivo() + "')";
        System.out.println("SQL CREATE : " + sql);
        st.execute(sql);        
        return newUserId;	
    }
    
    public void updateUtilizador(Utilizador u) throws Exception
    {
        Statement st = createStatement();
	String sql = "UPDATE utilizadores SET login = '" + u.getLogin() +  "', password = '" + u.getPassword() + "', email = '" + u.getEmail() + "', empresa_id = " + u.getEmpresa_id() + ", estabelecimento_id = " + u.getEstabelecimento_id() + ", administrador = '" + u.getAdministrador() + "', tipo = " + u.getTipo() + ", numero_cedula = '" + u.getNumero_cedula() + "', cap = '" + u.getCap() + "', nome = '" + u.getNome() + "', medico_id = " + u.getMedico_id() + ", funcionario_hst_id = " + u.getFuncionario_hst_id() + ", activo = '" + u.getActivo()  + "' WHERE id = " + u.getId();
        st.execute(sql);           	
    }
    
    public void deleteUser(Integer userId) throws Exception
    {
        Statement st = createStatement();
        String sql = "UPDATE utilizadores SET activo = 'n' WHERE id = " + userId;
        st.execute(sql);           	
    }
    
    public Utilizador getUtilizador(String login) throws Exception
    {
	Utilizador u = new Utilizador();
        Statement st = createStatement();
        String sql = "SELECT * FROM utilizadores WHERE login = '" + login + "'";
        ResultSet rs = st.executeQuery(sql);
        rs.first();
	u.setId(new Integer(rs.getInt("id")));
	u.setLogin(rs.getString("login"));
	u.setPassword(rs.getString("password"));
        u.setEmail(rs.getString("email"));
        u.setEmpresa_id(new Integer(rs.getInt("empresa_id")));
        u.setEstabelecimento_id(new Integer(rs.getInt("estabelecimento_id")));
        u.setAdministrador(rs.getString("administrador"));      
        u.setTipo(new Integer(rs.getInt("tipo")));
        u.setNumero_cedula(rs.getString("numero_cedula"));
        u.setCap(rs.getString("cap"));
        u.setNome(rs.getString("nome"));
        u.setMedico_id(new Integer(rs.getInt("medico_id")));
        u.setFuncionario_hst_id(new Integer(rs.getInt("funcionario_hst_id"))); 
        u.setActivo(rs.getString("activo"));
	return u;
    }
    
    public Utilizador getUtilizador(Integer id) throws Exception
    {
	Utilizador u = new Utilizador();
        Statement st = createStatement();
        String sql = "SELECT * FROM utilizadores WHERE id = " + id;
        ResultSet rs = st.executeQuery(sql);
        rs.first();
	u.setId(new Integer(rs.getInt("id")));
	u.setLogin(rs.getString("login"));
	u.setPassword(rs.getString("password"));
        u.setEmail(rs.getString("email"));
        u.setEmpresa_id(new Integer(rs.getInt("empresa_id")));
        u.setEstabelecimento_id(new Integer(rs.getInt("estabelecimento_id")));
        u.setAdministrador(rs.getString("administrador"));      
        u.setTipo(new Integer(rs.getInt("tipo")));
        u.setNumero_cedula(rs.getString("numero_cedula"));
        u.setCap(rs.getString("cap"));
        u.setNome(rs.getString("nome"));
        u.setMedico_id(new Integer(rs.getInt("medico_id")));
        u.setFuncionario_hst_id(new Integer(rs.getInt("funcionario_hst_id"))); 
        u.setActivo(rs.getString("activo"));
	return u;
    }    
    
    public ArrayList getUtilizadoresListByTipo(Integer tipo) throws Exception
    {
        ArrayList list = new ArrayList();
        Statement st = createStatement();
        String sql = "SELECT * FROM utilizadores WHERE tipo = " + tipo;
        ResultSet rs = st.executeQuery(sql);
        rs.first();
        do
        {
            Utilizador u = new Utilizador();
            u.setId(new Integer(rs.getInt("id")));
            u.setLogin(rs.getString("login"));
            u.setPassword(rs.getString("password"));
            u.setEmail(rs.getString("email"));
            u.setEmpresa_id(new Integer(rs.getInt("empresa_id")));
            u.setEstabelecimento_id(new Integer(rs.getInt("estabelecimento_id")));
            u.setAdministrador(rs.getString("administrador"));      
            u.setTipo(new Integer(rs.getInt("tipo")));
            u.setNumero_cedula(rs.getString("numero_cedula"));
            u.setCap(rs.getString("cap"));
            u.setNome(rs.getString("nome"));
            u.setMedico_id(new Integer(rs.getInt("medico_id")));
            u.setFuncionario_hst_id(new Integer(rs.getInt("funcionario_hst_id"))); 
            u.setActivo(rs.getString("activo"));    
            list.add(u);
        }while(rs.next());
        return list;
    }
    
    public com.sun.rave.web.ui.model.Option[] getMedicosList() throws Exception
    {
//        Dblocal dblocal = new Dblocal();
//        dblocal.connect();
//        Statement stlocal = dblocal.createStatement();                
        Statement st = createStatement();        
        ArrayList list = new ArrayList();
        Medico m = new Medico();
        m.setId(new Integer(0));
        m.setNome("");
        list.add(m);
        String sql ="SELECT * FROM utilizadores WHERE activo = 'y' AND tipo = 5";
        ResultSet rs = st.executeQuery(sql);
        rs.first();
	do
	{
	    m = new Medico();
	    m.setId(new Integer(rs.getInt("id")));
            m.setNome(Utils.unicodeToHTML(rs.getString("nome")));
	    list.add(m);
	}while(rs.next());
        com.sun.rave.web.ui.model.Option[] listOptions = new com.sun.rave.web.ui.model.Option[list.size()];        
        ListIterator iter = list.listIterator();
        int i = 0;
        while(iter.hasNext())
        {
            m = (Medico) iter.next();
            
            listOptions[i] = new Option(m.getId(), Utils.unicodeToHTML(m.getNome()));
            i++;
        }
//        dblocal.close();                
        return listOptions;                
    }  
    
    public com.sun.rave.web.ui.model.Option[] getTecnicosSaudeList() throws Exception
    {
//        Dblocal dblocal = new Dblocal();
//        dblocal.connect();
//        Statement stlocal = dblocal.createStatement();    
        Statement st = createStatement();           
        ArrayList list = new ArrayList();
        TecnicoSaude t = new TecnicoSaude();
        t.setId(new Integer(0));
        t.setNome("");
        list.add(t);
        String sql ="SELECT * FROM utilizadores WHERE activo = 'y' AND tipo = 3";
        ResultSet rs = st.executeQuery(sql);
        rs.first();
	do
	{
	    t = new TecnicoSaude();
	    t.setId(new Integer(rs.getInt("id")));
            t.setNome(Utils.unicodeToHTML(rs.getString("nome")));
	    list.add(t);
	}while(rs.next());
        com.sun.rave.web.ui.model.Option[] listOptions = new com.sun.rave.web.ui.model.Option[list.size()];        
        ListIterator iter = list.listIterator();
        int i = 0;
        while(iter.hasNext())
        {
            t = (TecnicoSaude) iter.next();
            
            listOptions[i] = new Option(t.getId(), Utils.unicodeToHTML(t.getNome()));
            i++;
        }
//        dblocal.close();                
        return listOptions;                        
    }        
    
    public Integer getMaxPermissaoId()
    {
        Statement st = createStatement();
        String sql = "SELECT max(permissoes.id)+1 AS MAXPERMISSAOID FROM permissoes";
        try
        {
            ResultSet rs = st.executeQuery(sql);
            rs.first();
            Integer newId = new Integer(rs.getInt("MAXPERMISSAOID"));
            if(newId.intValue() == 0)
            {
                newId = new Integer(1);
            }
            return newId;            
        }
        catch(Exception ex)
        {
            ex.printStackTrace();            
            return new Integer(1);
        }
    }  
    
    public Integer createPermissao(Permissao p) throws Exception
    {
        Statement st = createStatement();
        Integer newId = getMaxPermissaoId();	
	
        String sql = "INSERT INTO permissoes (id, user_id, codigo_permissao) VALUES (" + newId  + ", " + p.getUser_id() + ", " + p.getCodigo_permissao() + ")";
        st.execute(sql);        
        return newId;	
    }    
    
    public Integer getPermissionCode(Integer userId) throws Exception
    {
        Statement st = createStatement();
        String sql = "SELECT * FROM permissoes WHERE user_id = " + userId;
        ResultSet rs = st.executeQuery(sql);
        rs.first();
        Integer permission = new Integer(rs.getInt("codigo_permissao"));
	return permission;        
    }
    
    private Statement createStatement()
    {
        Db db = new Db();
        return db.createStatement();
    }       
    
}
