using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using System.Data.Odbc;
using System.Threading;


namespace Proyecto_Recolector
{
    public partial class Form_principal : Form
    {

        String rutaBD = "";
        int ultimoID = 0;

        public Form_principal()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button_bd_Click(object sender, EventArgs e)
        {
            openFileDialog.Filter = "Bases de Datos en Access (.mdb)|*.mdb";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
               


               
                rutaBD = openFileDialog.FileName;
                

                

                try
                {
                    //Realizamos una conexion odbc (base de datos access)
                    OdbcConnection MyConnection = new OdbcConnection();
                    //Cadena de conexion. Esto es lo que hay que poner para acceder
                    //a una base de datos en access.
                    String cadenaConexion = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + rutaBD + ";Uid=;Pwd=;";
                    
                    MyConnection.ConnectionString = cadenaConexion;
                    String consulta = "SELECT max(id) FROM vehiculos_recogidos";

                    //Creamos un dataadapter donde depositaremos los resultados.
                    OdbcDataAdapter adaptador = new OdbcDataAdapter(consulta, MyConnection);
                    
                    DataSet dataSet = new DataSet();
                    DataTable dataTable = new DataTable();
                    //dataTable.Locale = System.Globalization.CultureInfo.InvariantCulture;
                    //Incluimos en el datatable lo que hemos obtenido de la consulta
                    adaptador.Fill(dataTable);
                    dataTable.Rows[0][0].ToString();
                    
                    //MessageBox.Show(dataTable.Rows[0][0].ToString());
                    ultimoID = (int)dataTable.Rows[0][0];
                    MessageBox.Show("Base de datos Cargada con exito");
                    textBox_ultimoId.Text = ultimoID.ToString();
                    button_start.Enabled = true;
                    textBox_limite.Text = (0 + 1).ToString();

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.StackTrace);
                }
            }
        }

        private void button_salir_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void button_start_Click(object sender, EventArgs e)
        {
            
            //mostrar ventana de espera
            /*Espera ventana = new Espera();
            Thread th1 = new Thread(new ThreadStart(ventana.Show));
            th1.Start();*/


            /*Espera ventana = new Espera();
            ventana.Show();*/
            
            
            
            //      CONEXION A LA BD

            //Realizamos una conexion odbc (base de datos access)
            OdbcConnection conexion = new OdbcConnection();
            //Cadena de conexion. Esto es lo que hay que poner para acceder
            //a una base de datos en access.
            String cadenaConexion = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + rutaBD + ";Uid=;Pwd=;";
            conexion.ConnectionString = cadenaConexion;
            


            /* conexion a pagina web */



            WebClient client = new WebClient();
            Stream data;
            String url = "";
            StreamReader reader;


            String texto = "";

            int contador = 0;

            int index1 = 0;
            int index2 = 0;






            /*  variables   */

            // carga el ultimo nunero de id guardado y le añade uno para continuar
            int id = ultimoID + 1;
            

            




            String marca = "";
            String modelo = "";
            String edicion = "";

            int precio = 0;
            String carroceria = "";
            int potencia = 0;


            DateTime fecha_matriculacion = new DateTime();
            String matriculacion_parcial = "";
            String mes = "";
            String año = "";
            //String fecha_weka = "";


            String cambio = "";
            int kilometros = 0;
            String combustible = "";
            int puertas = 0;
            double consumo = 0.0;





            //complementos

            Boolean wd4 = false;
            Boolean airbag = false;
            Boolean airbag_acompañante = false;
            Boolean airbag_lateral = false;
            Boolean aire_acon = false;
            Boolean cierre_cent = false;
            Boolean climatizador = false;
            Boolean direccion_asistida = false;
            Boolean elevalunas = false;
            Boolean xenon = false;
            Boolean llantas = false;
            Boolean aparcar = false;
            Boolean navegacion = false;
            Boolean cuero = false;
            Boolean techo_solar = false;


            Boolean abs = false;
            Boolean adap_disca = false;
            Boolean alarma = false;
            Boolean asientos_calefactables = false;
            Boolean asientos_electricos = false;
            Boolean baca = false;
            Boolean bola_remolque = false;
            Boolean clima_bizona = false;
            Boolean control_trac = false;
            Boolean control_velo = false;
            Boolean esp = false;
            Boolean anti_niebla = false;
            Boolean inmobilizador = false;
            Boolean ordenador_bordo = false;
            Boolean radio = false;
            Boolean radio_cd = false;
            Boolean tunning = false;


            
            



            /* RECORRIDO           */

            for (int i = id; i <= (Convert.ToInt16( textBox_limite.Text)+id); i++)
            {



                url = "http://www.autoscout24.es/Details.aspx?id=" + i;
                data = client.OpenRead(url);

                reader = new StreamReader(data);



                texto = reader.ReadToEnd();


                if (texto.Contains("Vehículos de ocasión") && texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_pricePublicValue"))
                {
                    //si es de ocasion y tiene precio

                    /*textBox_id.Text = i.ToString();
                    this.Refresh();*/


                    /*   diseccion del texto */

                    //textBox_codigofuente.Text = texto;
                    texto = texto.Replace("  ", " ");
                    index1 = 0;
                    index2 = 0;



                    //* marca *//

                    index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_articleCaption_lblHead", index1) + 85;
                    index2 = texto.IndexOf(" ", index1);
                    //textBox_marca.Text = texto.Substring(index1, index2 - index1);
                    marca = texto.Substring(index1, index2 - index1);

                    //* modelo *// 

                    index1 = index2 + 1;
                    index2 = texto.IndexOf(" ", index1);
                    //textBox_modelo.Text = texto.Substring(index1, index2 - index1);
                    modelo = texto.Substring(index1, index2 - index1);


                    if (modelo.Contains("</div>"))
                    {
                        index2 = texto.IndexOf("</div>", index1);
                        modelo = texto.Substring(index1, index2 - index1 - 2);
                        edicion = "?";
                    }
                    else
                    {
                        //* edicion *//

                        index1 = index2 + 1;
                        index2 = texto.IndexOf("</div>", index1);
                        //textBox_version.Text = texto.Substring(index1, index2 - index1 - 2);
                        edicion = texto.Substring(index1, index2 - index1 - 2);
                        if (edicion.Contains("decoratedArea")) edicion = "?";    // por si no tiene , y coje codigo fuente
                        else
                        {
                            edicion = edicion.Replace(",", ".");
                            edicion = edicion.Replace("/", " ");
                            edicion = edicion.Replace("\\", " ");
                            edicion = edicion.Replace("\"", " ");
                        }

                    }


                    //* precio *//

                    //* siempre tiene precio si no no entra en la 1º condicion

                    index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_pricePublicValue") + 79;
                    index2 = texto.IndexOf(",-</span>", index1);
                    //textBox_pvp.Text = texto.Substring(index1, index2 - index1);
                    String arreglo_precio = texto.Substring(index1, index2 - index1);
                    arreglo_precio = arreglo_precio.Replace(".", "");
                    precio = System.Convert.ToInt32(arreglo_precio);



                    //* carroceria *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_bodyTypeValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_bodyTypeValue", index1) + 74;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_carroceria.Text = texto.Substring(index1, index2 - index1);
                        carroceria = texto.Substring(index1, index2 - index1);
                    }
                    else carroceria = "?";



                    //* matriculacion *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_firstRegValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_firstRegValue", index1) + 74;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_matriculacion.Text = texto.Substring(index1, index2 - index1);

                        matriculacion_parcial = texto.Substring(index1, index2 - index1);
                        mes = matriculacion_parcial.Substring(0, 2);
                        año = matriculacion_parcial.Substring(3, 4);

                        fecha_matriculacion = new DateTime(System.Convert.ToInt32(año), System.Convert.ToInt32(mes), 1);
                        //fecha_weka = "01-" + mes + "-" + año + " 00:00";
                    }
                    else
                    {
                        fecha_matriculacion = new DateTime();
                        //fecha_weka = "?";
                    }



                    //* kilometros *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_mileageValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_mileageValue", index1) + 73;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_km.Text = texto.Substring(index1, index2 - index1 - 3);
                        String arreglo_kilometros = texto.Substring(index1, index2 - index1 - 3);
                        arreglo_kilometros = arreglo_kilometros.Replace(".", "");
                        kilometros = System.Convert.ToInt32(arreglo_kilometros);
                    }
                    else kilometros = 0;


                    //* combustible *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_fuelValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_fuelValue", index1) + 70;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_combustible.Text = texto.Substring(index1, index2 - index1);
                        combustible = texto.Substring(index1, index2 - index1);
                        if (combustible.Equals("Gas")) combustible = "Gasolina";
                        if (combustible.Equals("Otros")) combustible = "?";
                    }
                    else combustible = "?";


                    //* potencia *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_powerKey"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_powerKey", index1);
                        index1 = texto.IndexOf("<td class=\"c2\">", index1);
                        index1 = texto.IndexOf("/", index1);
                        index2 = texto.IndexOf("<span class=\"c2-light\">", index1);
                        //textBox_cv.Text = texto.Substring(index1 + 1, index2 - index1 - 7);
                        potencia = System.Convert.ToInt32(texto.Substring(index1 + 1, index2 - index1 - 7));
                    }
                    else potencia = 0;


                    //* cambio *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_gearingTypeValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_gearingTypeValue", index1) + 77;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_cambio.Text = texto.Substring(index1, index2 - index1);
                        cambio = texto.Substring(index1, index2 - index1);
                    }
                    else cambio = "?";


                    //* consumo combustible *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_consumptionValue"))
                    {

                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_consumptionValue", index1) + 77;
                        index2 = texto.IndexOf(" ", index1);
                        //textBox_consumo.Text = texto.Substring(index1, index2 - index1);
                        String arreglo_consumo = texto.Substring(index1, index2 - index1);
                        //arreglo_consumo = arreglo_consumo.Replace(",", ".");
                        consumo = System.Convert.ToDouble(arreglo_consumo);

                    }
                    else consumo = 0.0;


                    //* puertas *//

                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_doorsValue"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_myArticleDataControl_doorsValue", index1) + 71;
                        index2 = texto.IndexOf("</span>", index1);
                        //textBox_puertas.Text = texto.Substring(index1, index2 - index1);
                        puertas = System.Convert.ToInt32(texto.Substring(index1, index2 - index1));
                    }
                    else puertas = 0;


                    //* EQUIPAMIENTO *//

                    String equipamiento = "";
                    if (texto.Contains("ctl00_ctl00_decoratedArea_contentArea_articleMoreDetails_myArticleEquipments_equipmentsHead"))
                    {
                        index1 = texto.IndexOf("ctl00_ctl00_decoratedArea_contentArea_articleMoreDetails_myArticleEquipments_equipmentsHead", index1);
                        index2 = texto.IndexOf("equi-list-glossar", index1);
                        equipamiento = texto.Substring(index1, index2 - index1);
                    }

                    if (equipamiento.Contains("ABS")) abs = true; else abs = false;
                    if (equipamiento.Contains("4WD")) wd4 = true; else wd4 = false;
                    if (equipamiento.Contains("Airbag")) airbag = true; else airbag = false;
                    if (equipamiento.Contains("Airbag acompañante")) airbag_acompañante = true; else airbag_acompañante = false;
                    if (equipamiento.Contains("Airbags laterales")) airbag_lateral = true; else airbag_lateral = false;
                    if (equipamiento.Contains("Aire Acondicionado")) aire_acon = true; else aire_acon = false;
                    if (equipamiento.Contains("Cierre centralizado")) cierre_cent = true; else cierre_cent = false;
                    if (equipamiento.Contains("Climatizador")) climatizador = true; else climatizador = false;
                    if (equipamiento.Contains("Dirección asistida")) direccion_asistida = true; else direccion_asistida = false;
                    if (equipamiento.Contains("Elevalunas eléctrico")) elevalunas = true; else elevalunas = false;
                    if (equipamiento.Contains("Faros de xenon")) xenon = true; else xenon = false;
                    if (equipamiento.Contains("Llantas de aleación")) llantas = true; else llantas = false;
                    if (equipamiento.Contains("Sistema de ayuda de aparcamiento")) aparcar = true; else aparcar = false;
                    if (equipamiento.Contains("Sistema de navegación")) navegacion = true; else navegacion = false;
                    if (equipamiento.Contains("Tapicería de cuero")) cuero = true; else cuero = false;
                    if (equipamiento.Contains("Techo solar")) techo_solar = true; else techo_solar = false;
                    if (equipamiento.Contains("Adaptado para discapacitados")) adap_disca = true; else adap_disca = false;
                    if (equipamiento.Contains("Alarma")) alarma = true; else alarma = false;
                    if (equipamiento.Contains("Asientos calefactables")) asientos_calefactables = true; else asientos_calefactables = false;
                    if (equipamiento.Contains("Asientos eléctricos")) asientos_electricos = true; else asientos_electricos = false;
                    if (equipamiento.Contains("Baca")) baca = true; else baca = false;
                    if (equipamiento.Contains("Bola de remolque")) bola_remolque = true; else bola_remolque = false;
                    if (equipamiento.Contains("Climatizador bizona")) clima_bizona = true; else clima_bizona = false;
                    if (equipamiento.Contains("Control de tracción")) control_trac = true; else control_trac = false;
                    if (equipamiento.Contains("Control de velocidad")) control_velo = true; else control_velo = false;
                    if (equipamiento.Contains("ESP")) esp = true; else esp = false;
                    if (equipamiento.Contains("Faros antiniebla")) anti_niebla = true; else anti_niebla = false;
                    if (equipamiento.Contains("Inmovilizador")) inmobilizador = true; else inmobilizador = false;
                    if (equipamiento.Contains("Ordenador de a bordo")) ordenador_bordo = true; else ordenador_bordo = false;
                    if (equipamiento.Contains("Radio")) radio = true; else radio = false;
                    if (equipamiento.Contains("Radio/CD")) radio_cd = true; else radio_cd = false;
                    if (equipamiento.Contains("Tunning")) tunning = true; else tunning = false;



                    /*  INSERT EN BD */
                    /*
                    this.vehiculos_recogidosTableAdapter.Insert(i, marca, modelo, edicion, precio, carroceria, potencia, fecha_matriculacion, cambio, kilometros, combustible, puertas, consumo, wd4, airbag, airbag_acompañante,
                        airbag_lateral, aire_acon, cierre_cent, climatizador, direccion_asistida, elevalunas, xenon, llantas, aparcar, navegacion, cuero, techo_solar, abs, adap_disca, alarma, asientos_calefactables, asientos_electricos,
                        baca, clima_bizona, bola_remolque, control_trac, control_velo, esp, anti_niebla, inmobilizador, ordenador_bordo, radio, radio_cd, tunning);
                    */

                    try
                    {
                        
                        String consulta = "INSERT INTO vehiculos_recogidos ( Id,  Marca,  Modelo, Edicion,   Precio,  Carroceria,  Potencia,  Fecha_matriculacion,  Cambio,  Kilometros,  Combustible,  Consumo,  [4WD],  Airbag,  Airbag_acompañante,  Airbag_lateral,  Aire_A,  Cierre_cent,  Climatizador,  Direccion_asistida,  Elevalunas,  Xenon,  Llantas,  Aparcar_asis,  Navegador,  Asientos_cuero,  Techo_solar,  ABS,  Adap_disca,  Alarma,  Asisentos_calef,  Asientos_electricos,  Baca,  Bizona,  Bola_romolque,  Control_traccion,  Control_velocidad,  ESP,  Anti_niebla,  Inmobilizador,  Ordenador_bordo,  Radio,  Tunning)";
                        consulta += " Values(" + i + "," + marca + "," + modelo + "," + edicion + "," + precio + "," + carroceria + "," + potencia + "," + fecha_matriculacion + "," + cambio + "," + kilometros + "," + combustible + "," + puertas + "," + consumo + "," + wd4 + "," + airbag + "," + airbag_acompañante + "," + airbag_lateral + "," + aire_acon + "," + cierre_cent + "," + climatizador + "," + direccion_asistida + "," + elevalunas + "," + xenon + "," + llantas + "," + aparcar + "," + navegacion + "," + cuero + "," + techo_solar + "," + abs + "," + adap_disca + "," + alarma + "," + asientos_calefactables + "," + asientos_electricos + "," + baca + "," + clima_bizona + "," + bola_remolque + "," + control_trac + "," + control_velo + "," + esp + "," + anti_niebla + "," + inmobilizador + "," + ordenador_bordo + "," + radio + "," + radio_cd + "," + tunning;

                        OdbcCommand comando = new OdbcCommand(consulta, conexion);
                        comando.ExecuteNonQuery();
                           /* OleDbCommand cmd = new OleDbCommand(sql, conn);

                            OleDbDataReader reader = cmd.ExecuteReader();*/

                        contador+=1;

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.StackTrace);
                    }



                } // if pagina valida


            } // for recorrido

            //ventana.Close();
            MessageBox.Show("Recogidos " + contador + " vehiculos de " + Convert.ToInt16( textBox_limite.Text));
        }
    }
}
