package educacion;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class UsuarioBean {

	private String nombre;
	private String mensaje, mensaje2;
	private boolean correcto;
	private String clave;
	private String idUsuario;
	private int tipo;
	private Connection con=null;
	private String url = "jdbc:mysql://localhost:3306/formacionprofesorado?user=root&password=lafuisek";
	private int numeroUsuarios;
	private String[] usuarios=new String [100];
	
	/**
	 * Funcion que introduce la url adecuada para conectarse a la base de datos e
	 * inicializa el mensaje de bienvenida
	 */
	public UsuarioBean(){
		mensaje="";
		mensaje2="";
	}
	/**
	 * Funcion que se conecta a la base de datos para conseguir la contraseña del usuario
	 * @return String que sera la contraseña del usuario
	 */
	public String getClave() {
		
			if(con==null){
				try{
					Class.forName("org.gjt.mm.mysql.Driver");
				}catch(Exception e){
					System.out.println("No se ha encontrado el driver JDBC");
				}
			}
					
			try {
				
				con=DriverManager.getConnection(url);
				Statement st=con.createStatement();
				
				String consulta="SELECT clave FROM usuario WHERE idUsuario ='" + idUsuario + "'";
				ResultSet rs=st.executeQuery(consulta);
				
				rs.beforeFirst();
					
				while(rs.next()){
					clave=rs.getString("clave");
				}
				
				con.close();
				con=null;
				
			}catch (SQLException e) {
			e.printStackTrace();
		    }	
	    
		return clave;
	}
	
	/**
	 * Funcion para introducir la contraseña del usuario
	 * @param clave, se le pasa este String que sera la contraseña 
	 */
	public void setClave(String clave) {
		this.clave = clave;
	}

	/**
	 * Funcion que se conecta a la base de datos para recuperar el identificador de usuario
	 * @return String con el identificador del usuario
	 */
	public String getIdUsuario() {
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);			
			//con=Conexion.getConexion();
			Statement st=con.createStatement();
			
			String consulta="SELECT idUsuario FROM usuario WHERE idUsuario ='" + idUsuario + "'";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
				
			while(rs.next()){
				idUsuario=rs.getString("idUsuario");
			}

			con.close();
			con=null;
			
		}catch (SQLException e) {
		e.printStackTrace();
	    }	
		
		return idUsuario;
	}

	/**
	 * Funcion para introducir el identificador del usuario
	 * @param idUsuario, cadena que corresponde al identificador de usuario
	 */
	public void setIdUsuario(String idUsuario) {
		this.idUsuario = idUsuario;
	}

	/**
	 * Funcion que se conecta a la base de datos para conseguir el tipo del usuario (alumno o profesor)
	 * @return int que tendra un valor de 1 si el usuario es de tipo profesor y 2 si el alumno
	 */
	public int getTipo() {
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
			Statement st=con.createStatement();
			
			String consulta="SELECT tipo FROM usuario WHERE idUsuario ='" + idUsuario + "'";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
				
			while(rs.next()){
				tipo=rs.getInt("tipo");
			}
			
			con.close();
			con = null;
			
		}catch (SQLException e) {
		e.printStackTrace();
	    }	
		
		return tipo;
	}

	/**
	 * Funcion para introducir el tipo de usuario que se trata (profesor o alumno)
	 * @param tipo
	 */
	public void setTipo(int tipo) {
		this.tipo = tipo;
	}

	/**
	 * Funcion para saber si el usuario es correcto o no
	 * @return booleano que valdra true si el usuario es correcto o false en caso contrario
	 */
	public boolean isCorrecto() {
		return correcto;
	}

	/**
	 * Funcion que introduce si el usuario es correcto o no
	 * @param correcto, booleano que valdra true o false segun si el usuario es correcto o no
	 */
	public void setCorrecto(boolean correcto) {
		this.correcto = correcto;
	}
	
	/**
	 * Funcion que nos devuelve un mensaje para mostrar
	 * @return String, que sera un mensaje que luego mostraremos
	 */
	public String getMensaje() {
		return mensaje;
	}

	/**
	 * Funcion para introducir el mensaje que mas tarde mostraremos
	 * @param mensaje, cadena formada por el mensaje que se mostrara mas tarde
	 */
	public void setMensaje(String mensaje) {
		this.mensaje = mensaje;
	}

	/**
	 * Funcion que nos devuelve un mensaje para mostrar
	 * @return String, que sera un mensaje que luego mostraremos
	 */
	public String getMensaje2() {
		return mensaje2;
	}

	/**
	 * Funcion para introducir el mensaje que mas tarde mostraremos
	 * @param mensaje, cadena formada por el mensaje que se mostrara mas tarde
	 */
	public void setMensaje2(String mensaje2) {
		this.mensaje2 = mensaje2;
	}
	
	/**
	 * Funcion que consultara en la base de datos el nombre del usuario y nos lo devolvera
	 * @return String que hara referencia al nombre del usuario
	 */
	public String getNombre() {
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
			Statement st=con.createStatement();
			
			String consulta="SELECT nombre FROM usuario WHERE idUsuario ='" + idUsuario + "'";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
				
			while(rs.next()){
				nombre=rs.getString("nombre");
			}
			
			con.close();
			con=null;

		}catch (SQLException e) {
		e.printStackTrace();
	    }			
		return nombre;
	}

	/**
	 * Funcion para introducir el nombre del usuario
	 * @param nombre, String que corresponde al nombre del usuario
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	/**
	 * Funcion que permite introducir en la base de datos un nuevo usuario
	 * @param idUsuario, String que sera el identificador (DNI) del usuario
	 * @param nombre, String que sera el nombre del usuario
	 * @param clave, String que sera la contraseña del usuario
	 * @param tipo, int que tendra valor 1 ó 2 según el tipo del usuario (profesor o alumno)
	 */
	public void nuevoUsuario(String idUsuario, String nombre, String clave, int tipo){
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
		
			Statement st=con.createStatement();
			
			String consulta="INSERT INTO usuario (idUsuario, nombre, clave, tipo) VALUES ('"+idUsuario+"','"+nombre+"','"+clave+"',"+tipo+")";
			st.execute(consulta);

			con.close();
			con=null;
			
		}catch (SQLException e) {
			e.printStackTrace();
	    }			
	
	}
	
	/**
	 * Funcion que nos permite borrar a un usuario de la base de datos
	 * @param idUsuario, String que corresponde con el identificador de usuario a borrar
	 */
	public void borrarUsuario (String idUsuario){
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);	
		
			Statement st= con.createStatement();
			
			String consulta="DELETE FROM usuario WHERE idUsuario ='" + idUsuario + "'";
			st.execute(consulta);
			con.close();
			con=null;
			
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
	
	/**
	 * Funcion que nos indica si existe o no en la base de datos un usuario con ese identificador
	 * @param idUsuario, String que corresponde la identificador de usuario
	 * @return un booleano que valdra true o false segun exista o no ese usuario en la base de datos
	 */
	public boolean existeUsuario(String idUsuario){
		
		boolean encontrado=false;
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
			Statement st = con.createStatement();
			
			String consulta="SELECT * FROM usuario WHERE idUsuario='"+idUsuario+"'";
			ResultSet rs= st.executeQuery(consulta);
			rs.beforeFirst();
			
			while(rs.next()){
				encontrado=true;
			}
			con.close();
			con=null;
			
		}catch(SQLException e){
			e.printStackTrace();
		}
		
		return encontrado;
	}
	
	/**
	 * Funcion que permite calcular el numero de usuarios registrados en la pagina
	 * @return int que indica el numero de usuarios registrados que estan introducidos en la base de datos
	 */
	public int numeroUsuarios(){
		numeroUsuarios=0;
		
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
			Statement st = con.createStatement();
			
			String consulta="SELECT idUsuario FROM usuario";
			ResultSet rs= st.executeQuery(consulta);
			rs.beforeFirst();
			
			while(rs.next()){
				
				numeroUsuarios++;
			}
			con.close();
			con=null;
			
		}catch(SQLException e){
			e.printStackTrace();
		}
		
		return numeroUsuarios;
	}
	
	/**
	 * Funcion que consulta todos los usuarios existentes en la base de datos
	 * @return un vector de String que contiene los identificadores y nombres de todos los usuarios
	 */
	public String[] listarUsuarios(){
		
		if(con==null){
			try{
				Class.forName("org.gjt.mm.mysql.Driver");
			}catch(Exception e){
				System.out.println("No se ha encontrado el driver JDBC");
			}
		}
				
		try {
			
			con=DriverManager.getConnection(url);
			Statement st = con.createStatement();
			
			String consulta="SELECT idUsuario, nombre, tipo FROM usuario";
			ResultSet rs= st.executeQuery(consulta);
			rs.beforeFirst();
			int i=0;
			while(rs.next()){
				usuarios[i]=rs.getString("idUsuario");
				i++;
				usuarios[i]=rs.getString("nombre");
				i++;
				int t=rs.getInt("tipo");
				String tipo="";
				if(t==1){
					tipo="profesor";
				}
				if(t==2){
					tipo="alumno";
				}
				usuarios[i]=tipo;
				i++;
			}
			con.close();
			con=null;
		}catch(SQLException e){
			e.printStackTrace();
		}
		
		return usuarios;
	}
	
}

