public string color { get; set; }//indica el grado de alerta. green:normal, yellow:alarma de tº media, red: alarma de tº alta

        public static List<lecturas> obtenerUltimasLecturasMolino(string nombreMolino)
        {
            List<lecturas> retorno = new List<lecturas>();

            List<sensores> listaSensores = sensores.obtenerTodosMolino(nombreMolino);

            SqlConnection cnx = conexion.crearConexion();

            for (int i = 0; i < listaSensores.Count; i++) 
            {
                lecturas temp = new lecturas();
                temp.numeroPolo = listaSensores[i].numero;
                temp.epc = listaSensores[i].epc;

                DateTime diezMinutos = DateTime.Now.AddMinutes(-10);

                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnx;
                cmd.CommandText = "SELECT TOP 1 * from lecturas WHERE EPC='" + listaSensores[i].epc + "' AND fecha>=@diezMinutos ORDER BY fecha DESC";
                cmd.CommandType = CommandType.Text;
                cmd.Parameters.Add("@diezMinutos", SqlDbType.DateTime).Value = diezMinutos;

                SqlDataReader dr = cmd.ExecuteReader();

                if(!dr.HasRows){
                    temp.fecha = DateTime.Now;
                    temp.temperatura = 0;
                    if(listaSensores[i].temperaturaAlta<=temp.temperatura)temp.color="red";
                    else if (listaSensores[i].temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                    else temp.color = "green";
                }

                while (dr.Read())
                {
                    temp.fecha = (DateTime)dr["fecha"];
                    temp.temperatura = (double)dr["temperatura"];
                    if(listaSensores[i].temperaturaAlta<=temp.temperatura)temp.color="red";
                    else if (listaSensores[i].temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                    else temp.color = "green";
                }
                retorno.Add(temp);
                dr.Close();
            }
            cnx.Close();

            return retorno;
        }
        public static lecturas obtenerUltimaLectura(string EPC)
        {
            lecturas retorno = new lecturas();

            sensores sensor = new sensores().getSensor(EPC);

            DateTime diezMinutos = DateTime.Now.AddMinutes(-10);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT TOP 1 * from lecturas WHERE EPC='" + sensor.epc + "' and fecha>@fecha ORDER BY fecha DESC";
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value = diezMinutos;

            SqlDataReader dr = cmd.ExecuteReader();

            if (!dr.HasRows) 
            {
                retorno.numeroPolo = sensor.numero;
                retorno.epc = sensor.epc;
                retorno.fecha = DateTime.Now;
                retorno.temperatura = 0;
                if (sensor.temperaturaAlta <= retorno.temperatura) retorno.color = "red";
                else if (sensor.temperaturaMedia <= retorno.temperatura) retorno.color = "yellow";
                else retorno.color = "green";
            }
            while (dr.Read())
            {
                retorno.numeroPolo = sensor.numero;
                retorno.epc = sensor.epc;
                retorno.fecha = (DateTime)dr["fecha"];
                retorno.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= retorno.temperatura) retorno.color = "red";
                else if (sensor.temperaturaMedia <= retorno.temperatura) retorno.color = "yellow";
                else retorno.color = "green";
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public static List<lecturas> obtenerUltimosDatos(string EPC, string inicio, string fin)
        {
            string año = inicio.Split(' ')[0].Split('/')[2];
            string mes = inicio.Split(' ')[0].Split('/')[1];
            string dia = inicio.Split(' ')[0].Split('/')[0];

            string hora = inicio.Split(' ')[1].Split(':')[0];
            string minuto = inicio.Split(' ')[1].Split(':')[1];

            if (inicio.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (inicio.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Inicio = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);

            año = fin.Split(' ')[0].Split('/')[2];
            mes = fin.Split(' ')[0].Split('/')[1];
            dia = fin.Split(' ')[0].Split('/')[0];

            hora = fin.Split(' ')[1].Split(':')[0];
            minuto = fin.Split(' ')[1].Split(':')[1];

            if (fin.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (fin.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Fin = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);
            
            List<lecturas> retorno = new List<lecturas>();

            sensores sensor = new sensores().getSensor(EPC);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + sensor.epc 
                + "' AND fecha>=@inicio AND fecha<=@fin ORDER BY fecha ASC";
            cmd.CommandType = CommandType.Text;
            
            cmd.Parameters.Add("@inicio", SqlDbType.DateTime).Value = Inicio;
            cmd.Parameters.Add("@fin", SqlDbType.DateTime).Value = Fin;

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                lecturas temp = new lecturas();
                temp.numeroPolo = sensor.numero;
                temp.epc = sensor.epc;
                temp.fecha = (DateTime)dr["fecha"];
                temp.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= temp.temperatura) temp.color = "red";
                else if (sensor.temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                else temp.color = "green";

                retorno.Add(temp);
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public static List<lecturas> obtenerUltimosDatos(string EPC, string tiempo)
        {
            List<lecturas> retorno = new List<lecturas>();

            sensores sensor = new sensores().getSensor(EPC);

            SqlConnection cnx = conexion.crearConexion();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cnx;
            cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + sensor.epc + "' AND fecha>=@fecha ORDER BY fecha ASC";
            cmd.CommandType = CommandType.Text;

            DateTime fecha = new DateTime();

            if (tiempo.Equals("all"))
            {
                fecha = new DateTime(2001, 01, 01);
            }
            else if (tiempo.Equals("3h")) 
            {
                fecha = DateTime.Now.AddMinutes(-180);
            }
            else if (tiempo.Equals("1h"))
            {
                fecha = DateTime.Now.AddMinutes(-60);
            }
            else if (tiempo.Equals("20m"))
            {
                fecha = DateTime.Now.AddMinutes(-20);
            }

            cmd.Parameters.Add("@fecha", SqlDbType.DateTime).Value=fecha;

            SqlDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                lecturas temp = new lecturas();
                temp.numeroPolo = sensor.numero;
                temp.epc = sensor.epc;
                temp.fecha = (DateTime)dr["fecha"];
                temp.temperatura = (double)dr["temperatura"];
                if (sensor.temperaturaAlta <= temp.temperatura) temp.color = "red";
                else if (sensor.temperaturaMedia <= temp.temperatura) temp.color = "yellow";
                else temp.color = "green";

                retorno.Add(temp);
            }
            dr.Close();
            cnx.Close();

            return retorno;
        }
        public static List<lecturas> obtenerUltimosDiezMinutosMolinoTemp(string nombreMolino, string temperatura, string inicio, string fin)
        {
            string año = inicio.Split(' ')[0].Split('/')[2];
            string mes = inicio.Split(' ')[0].Split('/')[1];
            string dia = inicio.Split(' ')[0].Split('/')[0];

            string hora = inicio.Split(' ')[1].Split(':')[0];
            string minuto = inicio.Split(' ')[1].Split(':')[1];

            if (inicio.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (inicio.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Inicio = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);

            año = fin.Split(' ')[0].Split('/')[2];
            mes = fin.Split(' ')[0].Split('/')[1];
            dia = fin.Split(' ')[0].Split('/')[0];

            hora = fin.Split(' ')[1].Split(':')[0];
            minuto = fin.Split(' ')[1].Split(':')[1];

            if (fin.Split(' ')[2].Equals("AM") && hora.Equals("12")) hora = "0";
            if (fin.Split(' ')[2].Equals("PM") && !hora.Equals("12")) hora = (int.Parse(hora) + 12).ToString();

            DateTime Fin = new DateTime(int.Parse(año), int.Parse(mes), int.Parse(dia), int.Parse(hora), int.Parse(minuto), 0);

            float Temperatura = float.Parse(temperatura);

            List<lecturas> retorno = new List<lecturas>();

            List<sensores> listaSensores = sensores.obtenerTodosMolino(nombreMolino);

            SqlConnection cnx = conexion.crearConexion();

            for (int i = 0; i < listaSensores.Count; i++)
            {
                List<lecturas> esteEPC = new List<lecturas>();
                bool agregar = false;

                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnx;
                cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + listaSensores[i].epc
                    + "' AND fecha>=@inicio AND fecha<=@fin ORDER BY fecha ASC";
                cmd.CommandType = CommandType.Text;

                cmd.Parameters.Add("@inicio", SqlDbType.DateTime).Value = Inicio;
                cmd.Parameters.Add("@fin", SqlDbType.DateTime).Value = Fin;

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    lecturas temp = new lecturas();
                    temp.numeroPolo = listaSensores[i].numero;
                    temp.epc = listaSensores[i].epc;
                    temp.fecha = (DateTime)dr["fecha"];
                    temp.temperatura = (double)dr["temperatura"];
                    if (temp.temperatura > Temperatura) agregar = true;
                    if (listaSensores[i].temperaturaAlta <= temp.temperatura)
                        temp.color = "red";
                    else if (listaSensores[i].temperaturaMedia <= temp.temperatura)
                        temp.color = "yellow";
                    else temp.color = "green";
                    if(temp.temperatura>=Temperatura)esteEPC.Add(temp);
                }
                dr.Close();

                if (agregar)
                {
                    for (int j = 0; j < esteEPC.Count; j++)
                    {
                        retorno.Add(esteEPC[j]);
                    }
                }
            }
            cnx.Close();

            return retorno;
        }
        public static List<lecturas> obtenerUltimosDiezMinutosMolinoTemp(string nombreMolino, string temperatura)
        {
            float Temperatura = float.Parse(temperatura);

            List<lecturas> retorno = new List<lecturas>();

            List<sensores> listaSensores = sensores.obtenerTodosMolino(nombreMolino);

            SqlConnection cnx = conexion.crearConexion();

            for (int i = 0; i < listaSensores.Count; i++)
            {
                List<lecturas> esteEPC = new List<lecturas>();
                bool agregar = false;
                
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = cnx;
                cmd.CommandText = "SELECT * from lecturas WHERE EPC='" + listaSensores[i].epc
                    + "' AND fecha>=@cincoMinutos ORDER BY fecha ASC";
                cmd.CommandType = CommandType.Text;

                DateTime diezMinutos = DateTime.Now.AddMinutes(-10);
                cmd.Parameters.Add("@cincoMinutos", SqlDbType.DateTime).Value = diezMinutos;

                SqlDataReader dr = cmd.ExecuteReader();

                while (dr.Read())
                {
                    lecturas temp = new lecturas();
                    temp.numeroPolo = listaSensores[i].numero;
                    temp.epc = listaSensores[i].epc;
                    temp.fecha = (DateTime)dr["fecha"];
                    temp.temperatura = (double)dr["temperatura"];
                    if (temp.temperatura > Temperatura) agregar = true;
                    if (listaSensores[i].temperaturaAlta <= temp.temperatura)
                        temp.color = "red";
                    else if (listaSensores[i].temperaturaMedia <= temp.temperatura)
                        temp.color = "yellow";
                    else temp.color = "green";
                    if (temp.temperatura >= Temperatura) esteEPC.Add(temp);
                }
                dr.Close();

                if (agregar)
                {
                    for (int j = 0; j < esteEPC.Count; j++)
                    {
                        retorno.Add(esteEPC[j]);
                    }
                }
            }
            cnx.Close();

            return retorno;
        }