/* public bool Eliminar(Ciudad ciudad)
        {
            throw new NotImplementedException();
        }

        public bool Ingresar(Ciudad ciudad)
        {
            throw new NotImplementedException();
        }
        */
        public List<Ciudad> Listar()
        {
            SqlCommand comando = null;
            var listaciudad = new List<Ciudad>();
            string procedimientoAlmacenado = "sp_ListarCiudad";

            try
            {

                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                var dataReader = comando.ExecuteReader();

                while (dataReader.Read())
                {

                    var ciudad = new Ciudad(dataReader["Nombre"].ToString());

                    listaciudad.Add(ciudad);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return listaciudad;
        }
 public Ruta(Ciudad Origen, Ciudad Destino, Double TimepoEstimado)
 {
     this.Origen = Origen;
     this.Destino = Destino;
     this.TiempoEstimado = TiempoEstimado;
     Estado = true;
 }
        public Ciudad Buscar(string nombre)
        {
            string procedimientoAlmacenado = "sp_BuscarCiudad";
            SqlCommand comando = null;
            Ciudad ciudad = null;

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);
                comando.Parameters.AddWithValue("@prmNombre", nombre);

                SqlDataReader dataReader = comando.ExecuteReader();
                if (dataReader.Read())
                {
                    ciudad = new Ciudad(dataReader["Nombre"].ToString());

                }
            }
            catch (SqlException e)
            {

                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return ciudad;
        }
        public Ruta BuscarID(int id)
        {
            string procedimientoAlmacenado = "sp_BuscarRutaxID";
            SqlCommand comando = null;
            Ruta ruta = null;

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                comando.Parameters.AddWithValue("@prmId", id);

                gestorDAO.AbrirConexion();

                SqlDataReader dataReader = comando.ExecuteReader();

                if (dataReader.Read())
                {
                    var origen = new Ciudad(dataReader[6].ToString());
                    origen.ID = Convert.ToInt32(dataReader[3]);
                    var destino = new Ciudad(dataReader[9].ToString());
                    destino.ID = Convert.ToInt32(dataReader[4]);

                    ruta = new Ruta();
                    ruta.Origen = origen;
                    ruta.Destino = destino;

                    ruta.ID = Convert.ToInt16(dataReader[0]);

                }
            }
            catch (SqlException e)
            {
                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return ruta;
        }
        public Itinerario Buscar(int id)
        {
            string procedimientoAlmacenado = "sp_BuscarItinerarioxID";
            SqlCommand comando = null;
            Itinerario itinerario = null;

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                comando.Parameters.AddWithValue("@prmId", id);

                gestorDAO.AbrirConexion();

                SqlDataReader dataReader = comando.ExecuteReader();

                if (dataReader.Read())
                {
                    var conductor = new Conductor(dataReader.GetString(17), dataReader.GetString(18), dataReader.GetString(19), dataReader.GetString(20), dataReader.GetDateTime(21).ToString(), dataReader.GetString(22));
                    var tipoServicio = new TipoServicio(dataReader.GetString(30), dataReader.GetString(31));
                    var origen = new Ciudad(dataReader.GetString(34));
                    var destino = new Ciudad(dataReader.GetString(37));
                    var ruta = new Ruta(origen, destino, Convert.ToInt16(dataReader["TimepoEstimado"]));
                    var bus = new Bus(Convert.ToInt16(dataReader["Pisos"]), dataReader.GetString(11), dataReader.GetString(12), dataReader.GetString(13), tipoServicio);
                    itinerario = new Itinerario(dataReader["FechaSalida"].ToString(), dataReader["HoraSalida"].ToString(), Convert.ToDecimal(dataReader["Precio"]), bus, conductor, ruta);

                    itinerario.ID = Convert.ToInt16(dataReader["idItinerario"]);

                }
            }
            catch (SqlException e)
            {
                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return itinerario;
        }
        public List<Ruta> Listar(string nombre)
        {
            SqlCommand comando = null;
            var listaruta = new List<Ruta>();
            string procedimientoAlmacenado = "sp_ListarRuta";

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                comando.Parameters.AddWithValue("@prmNombre", nombre);

                gestorDAO.AbrirConexion();

                var dataReader = comando.ExecuteReader();

                while (dataReader.Read())
                {
                    var origen = new  Ciudad(dataReader["Nombre"].ToString());
                    origen.ID = Convert.ToInt32(dataReader["Origen"]);
                    var destino = new Ciudad(dataReader["Nombre"].ToString());
                    destino.ID = Convert.ToInt32(dataReader["Destino"]);
                    var ruta = new Ruta(

                        origen,destino,
                        Convert.ToDouble(dataReader["TiempoEstimado"])

                        );

                    listaruta.Add(ruta);
                }
            }
            catch (Exception e)
            {

                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return listaruta;
        }
        public List<Ruta> Listar()
        {
            string procedimientoAlmacenado = "sp_ListarRutaID";
            SqlCommand comando = null;

            List<Ruta> listar = new List<Ruta>();

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                SqlDataReader dataReader = comando.ExecuteReader();

                while (dataReader.Read())
                {
                    var origen = new Ciudad(dataReader[6].ToString());
                    origen.ID = Convert.ToInt32(dataReader[3]);
                    var destino = new Ciudad(dataReader[9].ToString());
                    destino.ID = Convert.ToInt32(dataReader[4]);

                    var ruta = new Ruta();
                    ruta.Origen = origen;
                    ruta.Destino = destino;

                    ruta.ID = Convert.ToInt16(dataReader[0]);
                    listar.Add(ruta);
                }
            }
            catch (SqlException e)
            {
                throw e;
            }
            finally { gestorDAO.CerrarConexion(); }

            return listar;
        }
        public List<Venta> MostrarVenta()
        {
            SqlCommand comando = null;
            string procedimientoAlmacenado = "sp_MostrarPasaje";
            var mostrarVenta = new List<Venta>();
            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                var dataReader = comando.ExecuteReader();

                while (dataReader.Read())
                {
                    var pasajero = new Pasajero();
                    pasajero.Nombres = dataReader[14].ToString();
                    pasajero.ApellidoPaterno = dataReader[15].ToString();
                    pasajero.ApellidoMaterno = dataReader[16].ToString();

                    Ciudad origen = new Ciudad();
                    origen.Nombre = dataReader[34].ToString();

                    Ciudad destino = new Ciudad();
                    destino.Nombre = dataReader[37].ToString();

                    Ruta ruta = new Ruta();
                    ruta.Origen = origen;
                    ruta.Destino = destino;

                    Itinerario itinerario = new Itinerario();
                    itinerario.HoraSalida = dataReader[22].ToString();
                    itinerario.Ruta = ruta;

                    Venta venta = new Venta();

                    venta.FechaCompra = dataReader[1].ToString();
                    venta.Asiento = dataReader[2].ToString();
                    venta.NumeroBoleto = dataReader[3].ToString();
                    venta.CodigoSerie = dataReader[4].ToString();
                    venta.Pasajero = pasajero;
                    venta.Itinerario = itinerario;

                    venta.CantidadTotal = Convert.ToDecimal(dataReader["PrecioTotal"]);

                    mostrarVenta.Add(venta);
                }
            }
            catch (SqlException e)
            {

                throw e;
            }

            return mostrarVenta;
        }
        public List<Itinerario> Listar()
        {
            SqlCommand comando = null;
            string procedimientoAlmacenado = "sp_ListarItinerario";
            var listaItinerarios = new List<Itinerario>();

            try
            {
                comando = gestorDAO.ObtenerComandoSP(procedimientoAlmacenado);

                var dataReader = comando.ExecuteReader();

                while (dataReader.Read())
                {
                    var conductor = new Conductor(dataReader.GetString(17), dataReader.GetString(18), dataReader.GetString(19), dataReader.GetString(20), dataReader.GetDateTime(21).ToString(), dataReader.GetString(22));
                    var tipoServicio = new TipoServicio(dataReader.GetString(30), dataReader.GetString(31));
                    var origen = new Ciudad(dataReader.GetString(34));
                    var destino = new Ciudad(dataReader.GetString(37));
                    var ruta = new Ruta(origen, destino, Convert.ToInt16(dataReader["TimepoEstimado"]));
                    var bus = new Bus(Convert.ToInt16( dataReader["Pisos"]), dataReader.GetString(11), dataReader.GetString(12), dataReader.GetString(13), tipoServicio);
                    var itinerario = new Itinerario(dataReader["FechaSalida"].ToString(), dataReader["HoraSalida"].ToString(), Convert.ToDecimal(dataReader["Precio"]), bus, conductor, ruta);

                    itinerario.ID = Convert.ToInt16(dataReader["idItinerario"]);
                    listaItinerarios.Add(itinerario);
                }
            }
            catch (SqlException e)
            {

                throw e;
            }

            return listaItinerarios;
        }