/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package paqueteJava;

/**
 *
 * @author jorpumuo
 */


//import weka.core.converters.ConverterUtils.DataSource;

//import weka.classifiers.meta.FilteredClassifier;

//import weka.filters.unsupervised.attribute.Remove;
import weka.core.converters.ConverterUtils.DataSource;
//import weka.core.converters.ArffLoader;


//import weka.classifiers.Classifier;
import weka.core.Instances;
//import weka.core.Instance;
//import weka.filters.Filter;


//import weka.core.converters.ArffLoader;

//import java.io.File;

//import weka.classifiers.meta.FilteredClassifier;
//import weka.classifiers.trees.J48;
//import weka.classifiers.trees.M5P;

//import weka.classifiers.Evaluation;

//import weka.classifiers.meta.FilteredClassifier;
 //import weka.classifiers.trees.J48;
 //import weka.filters.unsupervised.attribute.Remove;

 //import weka.filters.unsupervised.attribute.Standardize;

 //import weka.filters.unsupervised.attribute.NominalToString;
 //import weka.core.Attribute;

  /*import java.sql.Connection;
  import java.sql.SQLException;
  import java.sql.DriverManager;*/

  /*import java.io.*;
  import java.util.*;
  import java.net.*;*/
  import java.sql.*;

  import weka.classifiers.Classifier;
  import weka.core.SerializationHelper;

 




public class claseWeka {

    //private Instances train = null;
    private Instances test = null;

    //Conexion y consultas a BD
    Connection con=null;
    Statement stat=null;
    ResultSet rs=null;

    private String algoritmo;


    //Atributos del vehiculo
    private String marca;
    private String modelo;
    private String carroceria;
    private String potencia;
    private String mes;
    private String año;
    private String fecha="";
    private String cambio;
    private String kilometros;
    private String combustible;
    private String consumo;
    private String wd4;
    private String airbag;
    private String airbag_a;
    private String airbag_l;
    private String aire_a;
    private String cierre_c;
    private String climatizador;
    private String direccion_a;
    private String elevalunas;
    private String xenon;
    private String llantas;
    private String aparcar_a;
    private String navegador;
    private String asientos_cuero;
    private String techo_s;
    private String abs;
    private String adap_d;
    private String alarma;
    private String asientos_calef;
    private String asientos_ele;
    private String baca;
    private String bizona;
    private String bola;
    private String control_tra;
    private String control_vel;
    private String esp;
    private String anti_niebla;
    private String inmobilizador;
    private String ordenador_bordo;
    private String radio;
    private String radio_cd;
    private String tunning;


    

    public void setMarca(String _marca){
        marca=_marca;
    }

    public String getMarca(){
        return marca;
    }

    public void setModelo(String _modelo){
        modelo=_modelo;
    }

    public String getModelo(){
        return modelo;
    }

    public void setCarroceria(String _carroceria){
        carroceria=_carroceria;
    }

    public String getCarroceria(){
        return carroceria;
    }

    public void setPotencia(String _potencia){
        potencia=_potencia;
    }

    public String getPotencia(){
        return potencia;
    }

    public void setMes(String _mes){
        mes=_mes;
    }

    public String getMes(){
        return mes;
    }

    public void setAño(String _año){
        año=_año;
    }

    public void setCambio(String _cambio){
        cambio=_cambio;
    }

    public String getCambio(){
        return cambio;
    }

    public void setKilometros(String _kilometros){
        kilometros=_kilometros;
    }

    public String getKilometros(){
        return kilometros;
    }
    public void setCombustible(String _combustible){
        combustible=_combustible;
    }
    
    public void setConsumo(String _consumo){
        consumo=_consumo;
    }
    public void setWd4(String _wd4){
        wd4=_wd4;
    }
    public void setAirbag(String _airbag){
        airbag=_airbag;
    }
    public void setAirbag_a(String _airbag_a){
        airbag_a=_airbag_a;
    }
    public void setAirbag_l(String _airbag_l){
        airbag_l=_airbag_l;
    }
    public void setAire_a(String _aire_a){
        aire_a=_aire_a;
    }
    public void setCierre_c(String _cierre_c){
        cierre_c=_cierre_c;
    }
    public void setClimatizador(String _climatizador){
        climatizador=_climatizador;
    }
    public void setDireccion_a(String _direccion_a){
        direccion_a=_direccion_a;
    }
    public void setElevalunas(String _elevalunas){
        elevalunas=_elevalunas;
    }
    public void setXenon(String _xenon){
        xenon=_xenon;
    }
    public void setLlantas(String _llantas){
        llantas=_llantas;
    }
    public void setAparcar_a(String _aparcar_a){
        aparcar_a=_aparcar_a;
    }
    public void setNavegador(String _navegador){
        navegador=_navegador;
    }
    public void setAsientos_cuero(String _asientos_cuero){
        asientos_cuero=_asientos_cuero;
    }
    public void setTecho_solar(String _techo_solar){
        techo_s=_techo_solar;
    }
    public void setAbs(String _abs){
        abs=_abs;
    }
    public void setAdap_disca(String _adap_disca){
        adap_d=_adap_disca;
    }
    public void setAlarma(String _alarma){
        alarma=_alarma;
    }
    public void setAsientos_calef(String _asientos_c){
        asientos_calef=_asientos_c;
    }
    public void setAsientos_ele(String _asientos_ele){
        asientos_ele=_asientos_ele;
    }
    public void setBaca(String _baca){
        baca=_baca;
    }
    public void setBizona(String _bizona){
        bizona=_bizona;
    }
    public void setBola_r(String _bola){
        bola=_bola;
    }
    public void setControl_t(String _control_t){
        control_tra=_control_t;
    }
    public void setControl_vel(String _control_vel){
        control_vel=_control_vel;
    }
    public void setEsp(String _esp){
        esp=_esp;
    }
    public void setAnti_niebla(String _anti_niebla){
        anti_niebla=_anti_niebla;
    }
    public void setInmobilizador(String _inmobilizardor){
        inmobilizador=_inmobilizardor;
    }
    public void setOrdenador_bordo(String _ordenador){
        ordenador_bordo=_ordenador;
    }
    public void setRadio(String _radio){
        radio=_radio;
    }public void setRadio_cd(String _radio_cd){
        radio_cd=_radio_cd;
    }
    public void setTunning(String _tunning){
        tunning=_tunning;
    }

    public void setAlgoritmo(String _algoritmo){
        algoritmo=_algoritmo;
    }


    public claseWeka(){
       
        
    }

    //   CONEXION A LA BASE DE DATOS      //


    public String abrirConexion() {

        String texto="";
         con=null;
         stat=null;
         rs=null;

        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            
        }
        catch(Exception e){ System.out.println("No se ha podido cargar el Driver JDBC-ODBC "+e); }

        try{
            con = DriverManager.getConnection("jdbc:odbc:BD", "", "");
       
        }
        catch(Exception e){
            texto+="Error en la conexion - "+e;
        }

        try{
        stat = con.createStatement();
        
        }
        catch(Exception e){
            texto+="Error en el estatement"+e;
        }

        
        
        return texto;
}
    
    public String[] listarMarcas(){
        String lista[]=new String[100];
        
        try{
        rs = stat.executeQuery("SELECT DISTINCT marca FROM Vehiculos_recogidos");
        
        }
        catch(Exception e){
            
        }

        try{
            for(int i=0;rs.next();i++){
                lista[i]=rs.getString(1);
            }
        }
        catch(Exception e){
            
        }

        return lista;
    }

    public String[] listaModelos(){
        

        try{
        rs = stat.executeQuery("SELECT DISTINCT modelo FROM Vehiculos_recogidos where marca='"+marca+"'");

        }
        catch(Exception e){
            
        }

        String lista[]=new String[100];

        try{
            for(int i=0;rs.next();i++){
                lista[i]=rs.getString(1);
            }
        }
        catch(Exception e){
            
        }
        return lista;
    }

    public String  cerrarConexion(){
        String texto="";

        try{
        rs.close();
        stat.close();
        con.close();
        }
        catch(Exception e){
            texto+="Error al cerrar las conexiones. "+e+"<br>";
        }


        return texto;
    }


    public String prediccion(){

        String texto="El resultado de la predicción es : ";
        String modelo_p="";
        
 
        // ** Carga los datos de los arff **

        try{           
            test = DataSource.read("C:/Archivos para PFC/test.arff");
           }
        catch(Exception e){
            texto+="<br>Test no encontrado. "+e;
        }


        // ** Construye la clasificacion y realiza la prediccio  **


        // marca el precio como clase de la clasificacion
       

            
        if (test.classIndex() == -1) test.setClassIndex(2);


        for(int i=0;i<test.numAttributes();i++){
            test.firstInstance().setMissing(i);
        }

        

            //Existe un problema al insertar el modelo en el test cuando el modelo solo tiene numeros

            if(esNumero(modelo)){
                modelo_p=modelo+".0";
            }

            try{
            if(!marca.equals("")) test.firstInstance().setValue(0, marca);
            if(!modelo_p.equals(""))test.firstInstance().setValue(1, modelo_p);
            if(!carroceria.equals("")) test.firstInstance().setValue(3, carroceria);
            if(!potencia.equals("")) test.firstInstance().setValue(4,Double.parseDouble(potencia));
            if(!mes.equals("") && !año.equals("")) { fecha="01-"+mes+"-"+año+" 00:00"; test.firstInstance().setValue(5, test.attribute(5).parseDate(fecha)); }
            if(!cambio.equals("")) test.firstInstance().setValue(6, cambio);
            if(!kilometros.equals("")) test.firstInstance().setValue(7, Double.parseDouble(kilometros));
            if(!combustible.equals("")) test.firstInstance().setValue(8, combustible);
            if(!consumo.equals("")) test.firstInstance().setValue(9, Double.parseDouble(consumo));
            if(wd4!=null) test.firstInstance().setValue(10,"1.0");            
            if(airbag!=null) test.firstInstance().setValue(11, "1.0");
            if(airbag_a!=null) test.firstInstance().setValue(12, "1.0");
            if(airbag_l!=null) test.firstInstance().setValue(13, "1.0");
            if(aire_a!=null) test.firstInstance().setValue(14, "1.0");
            if(cierre_c!=null) test.firstInstance().setValue(15, "1.0");
            if(climatizador!=null) test.firstInstance().setValue(16, "1.0");
            if(direccion_a!=null) test.firstInstance().setValue(17, "1.0");
            if(elevalunas!=null) test.firstInstance().setValue(18, "1.0");
            if(xenon!=null) test.firstInstance().setValue(19, "1.0");
            if(llantas!=null) test.firstInstance().setValue(20, "1.0");
            if(aparcar_a!=null) test.firstInstance().setValue(21, "1.0");
            if(navegador!=null) test.firstInstance().setValue(22, "1.0");
            if(asientos_cuero!=null) test.firstInstance().setValue(23, "1.0");
            if(techo_s!=null) test.firstInstance().setValue(24, "1.0");
            if(abs!=null) test.firstInstance().setValue(25, "1.0");
            if(adap_d!=null) test.firstInstance().setValue(26, "1.0");
            if(alarma!=null) test.firstInstance().setValue(27, "1.0");
            if(asientos_calef!=null) test.firstInstance().setValue(28, "1.0");
            if(asientos_ele!=null) test.firstInstance().setValue(29, "1.0");
            if(baca!=null) test.firstInstance().setValue(30, "1.0");
            if(bizona!=null) test.firstInstance().setValue(31, "1.0");
            if(bola!=null) test.firstInstance().setValue(32, "1.0");
            if(control_tra!=null) test.firstInstance().setValue(33, "1.0");
            if(control_vel!=null) test.firstInstance().setValue(34, "1.0");
            if(esp!=null) test.firstInstance().setValue(35, "1.0");
            if(anti_niebla!=null) test.firstInstance().setValue(36, "1.0");
            if(inmobilizador!=null) test.firstInstance().setValue(37, "1.0");
            if(ordenador_bordo!=null) test.firstInstance().setValue(38, "1.0");
            if(radio!=null) test.firstInstance().setValue(39, "1.0");
            if(radio_cd!=null) test.firstInstance().setValue(40, "1.0");
            if(tunning!=null) test.firstInstance().setValue(41, "1.0");
            }
            catch(Exception e){
                texto+="error al cambiar los datos del test. "+e;
            }

           
           



            try{
                Classifier cls = (Classifier) SerializationHelper.read("C:/Archivos para PFC/"+algoritmo+".model");
                double pred = cls.classifyInstance(test.instance(0));
                int precio = (int)pred;
                texto += String.valueOf(precio)+" €.";
            }
            catch(Exception e){
                texto+="<br>Error al construir la evaluacion.  "+e;
            }

        return texto;
    }


      public boolean esNumero(String cadena){

          try {

            Integer.parseInt(cadena);

          return true;

          } catch (NumberFormatException nfe){

          return false;

          }

      }

      public String recomendados(){

          String resultado="";
          String consulta="";

        consulta="Select top 10 * From Vehiculos_recogidos where marca='"+marca+"' and modelo='"+modelo+"'";

        if(!carroceria.equals("")) consulta+=" and carroceria='"+carroceria+"'";
        if(!potencia.equals("")) consulta+=" and potencia >"+Integer.parseInt(potencia)*0.9+" and potencia <"+Integer.parseInt(potencia)*1.1;
        if(!mes.equals("") && !año.equals("")) { consulta+=" and fecha_matriculacion between #"+mes+"/01/"+año+"# and #"+mes+"/02/"+año+"#";}
            else { if(!año.equals("")) consulta+=" and fecha_matriculacion between #01/01/"+año+"# and #12/02/"+año+"#";  }
        if(!cambio.equals("")) consulta+=" and cambio ='"+cambio+"'";
        if(!kilometros.equals("")) consulta+=" and kilometros >"+Integer.parseInt(kilometros)*0.9+" and kilometros <"+Integer.parseInt(kilometros)*1.1;
        if(!combustible.equals("")) consulta+=" and combustible ='"+combustible+"'";
        if(!consumo.equals("")) consulta+=" and consumo >"+Integer.parseInt(consumo)*0.75+" and consumo <"+Integer.parseInt(consumo)*1.25;
        if(wd4!=null) consulta+=" and 4wd = true";
        if(airbag!=null) consulta+=" and airbag = true";
        if(airbag_a!=null) consulta+=" and airbag_acompañante = true";
        if(airbag_l!=null) consulta+=" and airbag_lateral = true";
        if(aire_a!=null) consulta+=" and aire_a = true";
        if(cierre_c!=null) consulta+=" and cierre_cent = true";
        if(climatizador!=null) consulta+=" and climatizador = true";
        if(direccion_a!=null) consulta+=" and direccion_asistida = true";
        if(elevalunas!=null) consulta+=" and elevalunas = true";
        if(xenon!=null) consulta+=" and xenon = true";
        if(llantas!=null) consulta+=" and llantas = true";
        if(aparcar_a!=null) consulta+=" and aparcar_asis = true";
        if(navegador!=null) consulta+=" and navegador = true";
        if(asientos_cuero!=null) consulta+=" and asientos_cuero = true";
        if(techo_s!=null) consulta+=" and techo_solar = true";
        if(abs!=null) consulta+=" and abs = true";
        if(adap_d!=null) consulta+=" and adap_disca = true";
        if(alarma!=null) consulta+=" and alarma = true";
        if(asientos_calef!=null) consulta+=" and asisentos_calef = true";
        if(asientos_ele!=null) consulta+=" and asientos_electricos = true";
        if(baca!=null) consulta+=" and baca = true";
        if(bizona!=null) consulta+=" and bizona = true";
        if(bola!=null) consulta+=" and bola_romolque = true";
        if(control_tra!=null) consulta+=" and control_traccion = true";
        if(control_vel!=null) consulta+=" and control_velocidad = true";
        if(esp!=null) consulta+=" and esp = true";
        if(anti_niebla!=null) consulta+=" and anti_niebla = true";
        if(inmobilizador!=null) consulta+=" and inmobilizador = true";
        if(ordenador_bordo!=null) consulta+=" and ordenador_bordo = true";
        if(radio!=null) consulta+=" and radio = true";
        if(radio_cd!=null) consulta+=" and radio_cd = true";
        if(tunning!=null) consulta+=" and tunnig = true";

        consulta+=" order by precio";


        try{
            rs = stat.executeQuery(consulta);

        }
        catch(Exception e){
           resultado+="<br>Error en la consulta"+e;
        }


        //resultado+=consulta+"<br>";

        try{
            if(rs.next()){
                resultado+="<table border=0 align=center cellpadding='3' cellspacing='3'><thead><tr><th>Marca</th><th>Modelo</th><th>Carroceria</th><th>Potencia</th><th>Fecha Matriculación</th><th>Cambio</th><th>Kilometros</th><th>Combustible</th><th>Comsumo</th><th>Precio</th><th>Link</th></tr></thead><tbody>";
                rs.beforeFirst();
            }
            else{
                    resultado+="<br> No se han encontrado vehiculos con esas características.";
                }
        }
        catch(Exception e){
            
        }



        try{
            for(int i=0;rs.next();i++){
                String fecha_r=rs.getString(7);
                fecha_r=fecha_r.substring(5, 7)+"-"+fecha_r.substring(0,4);
                resultado+="<tr><td >"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(5)+"</td><td>"+rs.getString(6)+"</td><td>"+fecha_r+"</td><td>"+rs.getString(8)+"</td><td>"+rs.getString(9)+"</td><td>"+rs.getString(10)+"</td><td>"+rs.getString(12)+"</td><td>"+rs.getString(4)+" €</td><td><a href='http://www.autoscout24.es/Details.aspx?id="+rs.getString(1)+"'>Enlace a anuncio</a></td></tr>";
            }
        }
        catch(Exception e){
            resultado+="<br>Error en la recorrido"+e;
        }

        resultado+="</tbody></table>";

        /*try{
            
            if(rs.first())   resultado+="</tbody></table>";
            
        }
        catch(Exception e){
            
        }*/



        return resultado;
      }
}
