package educacion;

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

public class TeoriaBean {

	private String nombre;
	private String definicion;
	private int idTeoria;
	private int numeroTeorias;
	String[] nombres=new String[20];
	private Connection con;
	private String uRL;
	private String url = "jdbc:mysql://localhost:3306/formacionprofesorado?user=root&password=lafuisek";
	
	/**
	 * Funcion que introduce la url adecuada para conectarse a la base de datos
	 */
	public TeoriaBean() {}
	
	/**
	 * Funcion que se conecta a la base de datos para proporcionarnos el numero de teorias introducidas en la base de datos
	 * @return int que tendra como valor el numero de teorias existentes en la base de datos
	 */
	public int numeroTeorias(){
		
		numeroTeorias=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 * FROM teoria;";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
			while(rs.next()){
				numeroTeorias++;
			}
			con.close();
			con=null;
		}catch (SQLException e) {
			e.printStackTrace();
	    }
		
		return numeroTeorias;
	}
	
	/**
	 * Funcion que se conecta a la base de datos para proporcionarnos el nombre de la teoria seleccionada
	 * @param idTeoria, identificador de la teoria seleccionada
	 * @return String con el nombre de la teoria
	 */
	public String getNombre(int idTeoria) {
		
		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 teoria WHERE idTeoria ="+idTeoria+";";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
			while(rs.next()){
				nombre=rs.getString("nombre");
			}
			con.close();
			con=null;
				
		}catch(SQLException e){System.err.println();}
			
		return nombre;
	}

	/**
	 * Funcion que se conecta a la base de datos para consultar el nombre e identificador
	 * de las teorias existentes
	 * @return
	 */
	
	public String[] getNombresIds() {
		
		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,idTeoria FROM teoria";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
			int i=0;
			int id;
			while(rs.next()){
				nombres[i]=rs.getString("nombre");
				i++;
				id=rs.getInt("idTeoria");
				nombres[i]=String.valueOf(id);
				i++;
			}
			con.close();
			con=null;
				
		}catch(SQLException e){System.err.println();}
			
		return nombres;
	}
	
	/**
	 * Funcion para introducir el nombre de la teoria
	 * @param nombre, String que corresponde al nombre de la teoria
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	
	/**
	 * Funcion que se conecta a la base de datos para proporcionarnos la descripcion de la teoria seleccionada
	 * @param idTeoria, int que corresponde al identificador de la teoria seleccionada
	 * @return String que es la definicion de la teoria 
	 */
	public String getDefinicion(int idTeoria) {
		
		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 descripcion FROM teoria WHERE idTeoria ="+idTeoria+";";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
			while(rs.next()){
				definicion=rs.getString("descripcion");
			}
			con.close();
			con=null;
				
		}catch(SQLException e){System.err.println();}
			
		return definicion;
	}
	
	/**
	 * Funcion que nos permite introducir la definicion de la teoria
	 * @param definicion, String que corresponde a la definicion de la teoria
	 */
	public void setDefinicion(String definicion) {
		this.definicion = definicion;
	}

	/**
	 * Funcion que se conecta a la base de datos para proporcionar la url de la teoria
	 * @param idTeoria, int que corresponde al identificador de la teoria 
	 * @return String que correspone a la url de la teoria seleccionada
	 */
	public String getUrl(int idTeoria) {
		
		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 url FROM teoria WHERE idTeoria ="+idTeoria+";";
			ResultSet rs=st.executeQuery(consulta);
			
			rs.beforeFirst();
			while(rs.next()){
				uRL=rs.getString("url");
			}
			con.close();
			con=null;
				
		}catch(SQLException e){System.err.println();}
			
		return uRL;
	}

	/**
	 * Funcion que permite introducir la url de la teoria
	 * @param url, localizador de la teoria
	 */
	public void setUrl(String url) {
		this.uRL = url;
	}

	/**
	 * Funcion que nos permite introducir el identificador de la teoria
	 * @param idTeoria
	 */
	public void setIdTeoria(int idTeoria) {
		this.idTeoria = idTeoria;
	}
	
	/**
	 * Funcion que nos permite obtener el identificador de la teoria 
	 * @return int, que se corresponde con el identificador de la teoria
	 */
	public int conseguirIdTeoria(){
		return idTeoria;
	}
}

