/// <summary>
        /// Obtiene una lista genérica del objeto Equipo
        /// autor: Pau Pedrosa
        /// </summary>
        /// <param name="idTorneo">Id del torneo</param>
        /// <returns>Lista genérica del objeto Equipo</returns>
        public List <Equipo> obtenerEquiposDeUnTorneo(int idTorneo)
        {
            SqlConnection con = new SqlConnection(cadenaDeConexion);
            SqlCommand    cmd = new SqlCommand();
            SqlDataReader dr;
            List <Equipo> respuesta = new List <Equipo>();
            Equipo        equipo    = null;

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                cmd.Connection = con;
                string sql = @"SELECT * 
                                FROM Equipos
                                WHERE idTorneo = @idTorneo
                                ORDER BY idEquipo DESC";
                cmd.Parameters.Clear();
                cmd.Parameters.Add(new SqlParameter("@idTorneo", idTorneo));
                cmd.CommandText = sql;
                dr = cmd.ExecuteReader();
                DAODelegado daoDelegado = new DAODelegado();
                DAOTorneo   daoTorneo   = new DAOTorneo();
                while (dr.Read())
                {
                    equipo = new Equipo()
                    {
                        idEquipo = Int32.Parse(dr["idEquipo"].ToString()),
                        nombre   = dr["nombre"].ToString(),
                        colorCamisetaPrimario   = dr["colorCamisetaPrimario"].ToString(),
                        colorCamisetaSecundario = dr["colorCamisetaSecundario"].ToString(),
                        directorTecnico         = dr["directorTecnico"].ToString(),
                        delegadoPrincipal       = daoDelegado.obtenerDelegadoPorId(Int32.Parse(dr["idDelegadoPrincipal"].ToString())),
                        delegadoOpcional        = daoDelegado.obtenerDelegadoPorId(Int32.Parse(dr["idDelegadoPrincipal"].ToString())),
                    };
                    respuesta.Add(equipo);
                }
                if (dr != null)
                {
                    dr.Close();
                }
                return(respuesta);
            }
            catch (Exception ex)
            {
                throw new Exception("Ocurrió un problema al cargar los datos: " + ex.Message);
            }
            finally
            {
                if (con != null && con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        /// <summary>
        /// Obtiene equipo por id
        /// autor: Pau Pedrosa
        /// </summary>
        /// <param name="idEquipo">id del equipo</param>
        /// <returns>Objeto Equipo</returns>
        public Equipo obtenerEquipoPorId(int idEquipo)
        {
            SqlConnection con = new SqlConnection(cadenaDeConexion);
            SqlCommand    cmd = new SqlCommand();
            SqlDataReader dr;
            Equipo        respuesta = null;

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                cmd.Connection = con;
                string sql = @"SELECT *
                                FROM Equipos
                                WHERE idEquipo = @idEquipo";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@idEquipo", idEquipo);
                cmd.CommandText = sql;
                DAODelegado daoDelegado = new DAODelegado();
                DAOJugador  daoJugador  = new DAOJugador();
                DAOTorneo   daoTorneo   = new DAOTorneo();
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    respuesta                         = new Equipo();
                    respuesta.idEquipo                = Int32.Parse(dr["idEquipo"].ToString());
                    respuesta.nombre                  = dr["nombre"].ToString();
                    respuesta.directorTecnico         = dr["directorTecnico"].ToString();
                    respuesta.colorCamisetaPrimario   = dr["colorCamisetaPrimario"].ToString();
                    respuesta.colorCamisetaSecundario = dr["colorCamisetaSecundario"].ToString();
                    respuesta.delegadoPrincipal       = daoDelegado.obtenerDelegadoPorId(Int32.Parse(dr["idDelegadoPrincipal"].ToString()));
                    respuesta.delegadoOpcional        = (dr["idDelegadoOpcional"] != System.DBNull.Value) ? daoDelegado.obtenerDelegadoPorId(Int32.Parse(dr["idDelegadoOpcional"].ToString())) : null;
                    respuesta.jugadores               = daoJugador.obtenerJugadoresDeUnEquipo(Int32.Parse(dr["idEquipo"].ToString()));
                }
                if (dr != null)
                {
                    dr.Close();
                }
                return(respuesta);
            }
            catch (Exception ex)
            {
                throw new Exception("Error al intentar recuperar el Equipo: " + ex.Message);
            }
            finally
            {
                if (con != null && con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        /// <summary>
        /// Obtiene un Equipo por Id, pero el objeto no tiene todos sus atributos, solo el nombre y el ID.
        /// autor: Antonio Herrera
        /// </summary>
        /// <param name="idEquipo">id del equipo</param>
        /// <returns>Objeto Equipo</returns>
        public Equipo obtenerEquipoReducidoPorId(int idEquipo)
        {
            SqlConnection con = new SqlConnection(cadenaDeConexion);
            SqlCommand    cmd = new SqlCommand();
            SqlDataReader dr;
            Equipo        respuesta = null;

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                cmd.Connection = con;
                string sql = @"SELECT *
                                FROM Equipos
                                WHERE idEquipo = @idEquipo";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@idEquipo", idEquipo);
                cmd.CommandText = sql;
                DAODelegado daoDelegado = new DAODelegado();
                DAOJugador  daoJugador  = new DAOJugador();
                DAOTorneo   daoTorneo   = new DAOTorneo();
                dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    respuesta          = new Equipo();
                    respuesta.idEquipo = Int32.Parse(dr["idEquipo"].ToString());
                    respuesta.nombre   = dr["nombre"].ToString();
                }
                if (dr != null)
                {
                    dr.Close();
                }
                return(respuesta);
            }
            catch (Exception ex)
            {
                throw new Exception("Error al intentar recuperar el Equipo: " + ex.Message);
            }
            finally
            {
                if (con != null && con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        /// <summary>
        /// Modifica en la BD el equipo
        /// autor: Pau Pedrosa
        /// </summary>
        /// <param name="equipo">Objeto Equipo a modificar con sus nuevos datos</param>
        public void modificarEquipo(Equipo equipo)
        {
            SqlConnection  con   = new SqlConnection(cadenaDeConexion);
            SqlCommand     cmd   = new SqlCommand();
            SqlTransaction trans = null;

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                trans = con.BeginTransaction();
                //registra los delegados en la BD
                DAODelegado daoDelegado = new DAODelegado();
                if (equipo.delegadoPrincipal != null)
                {
                    equipo.delegadoPrincipal.idDelegado = daoDelegado.registrarDelegado(equipo.delegadoPrincipal, con, trans);
                }
                if (equipo.delegadoOpcional != null)
                {
                    equipo.delegadoOpcional.idDelegado = daoDelegado.registrarDelegado(equipo.delegadoOpcional, con, trans);
                }

                cmd.Connection  = con;
                cmd.Transaction = trans;
                cmd.Parameters.Clear();
                string sql = @"UPDATE Equipos
                                SET nombre = @nombreEquipo, colorCamisetaPrimario = @colorCamisetaPrimario,
                                colorCamisetaSecundario = @colorCamisetaSecundario, directorTecnico = @directorTecnico,
                                idDelegadoPrincipal = @idDelegadoPrincipal, idDelegadoOpcional = @idDelegadoOpcional
                                WHERE idEquipo = @idEquipo";
                cmd.Parameters.AddWithValue("@nombreEquipo", equipo.nombre);
                cmd.Parameters.AddWithValue("@colorCamisetaPrimario", equipo.colorCamisetaPrimario);
                cmd.Parameters.AddWithValue("@colorCamisetaSecundario", equipo.colorCamisetaSecundario);
                cmd.Parameters.AddWithValue("@directorTecnico", equipo.directorTecnico);
                cmd.Parameters.AddWithValue("@idDelegadoPrincipal", equipo.delegadoPrincipal.idDelegado);
                cmd.Parameters.AddWithValue("@idEquipo", equipo.idEquipo);
                if (equipo.delegadoOpcional != null)
                {
                    cmd.Parameters.AddWithValue("@idDelegadoOpcional", equipo.delegadoOpcional.idDelegado);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@idDelegadoOpcional", DBNull.Value);
                }
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                trans.Commit();
            }
            catch (Exception ex)
            {
                trans.Rollback();
                //Si ya existe un equipo con ese nombre en ese torneo
                if (ex.Message.Contains("unique_nombre_idTorneo"))
                {
                    throw new Exception("Ya existe un equipo registrado con este nombre, por favor cambielo e intente nuevamente.");
                }
                throw new Exception("No se pudo modificar el equipo: " + ex.Message);
            }
            finally
            {
                if (con != null && con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }
        /// <summary>
        /// Registrar un nuevo Equipo en un torneo en la BD, junto a sus delegados
        /// autor: Pau Pedrosa
        /// </summary>
        /// <param name="equipo">El objeto Equipo que se va a registrar</param>
        /// <param name="idTorneo">Id del torneo al que pertenece el equipo</param>
        /// <returns>El id del equipo registrado</returns>
        public int registrarEquipo(Equipo equipo, int idTorneo)
        {
            SqlConnection  con   = new SqlConnection(cadenaDeConexion);
            SqlCommand     cmd   = new SqlCommand();
            SqlTransaction trans = null;

            try
            {
                if (con.State == ConnectionState.Closed)
                {
                    con.Open();
                }
                trans = con.BeginTransaction();
                DAODelegado daoDelegado = new DAODelegado();
                //registra delegado en la BD
                if (equipo.delegadoPrincipal != null)
                {
                    equipo.delegadoPrincipal.idDelegado = daoDelegado.registrarDelegado(equipo.delegadoPrincipal, con, trans);
                }
                if (equipo.delegadoOpcional != null)
                {
                    equipo.delegadoOpcional.idDelegado = daoDelegado.registrarDelegado(equipo.delegadoOpcional, con, trans);
                }
                cmd.Connection  = con;
                cmd.Transaction = trans;
                string sql = @"INSERT INTO Equipos (nombre, colorCamisetaPrimario, colorCamisetaSecundario, directorTecnico, idDelegadoPrincipal, idDelegadoOpcional, idTorneo)
                                    VALUES (@nombre, @colorCamisetaPrimario, @colorCamisetaSecundario, @directorTecnico , @idDelegadoPrincipal, @idDelegadoOpcional, @idTorneo)
                                    SELECT SCOPE_IDENTITY()";
                cmd.Parameters.Clear();
                cmd.Parameters.AddWithValue("@nombre", equipo.nombre);
                cmd.Parameters.AddWithValue("@colorCamisetaPrimario", equipo.colorCamisetaPrimario);
                cmd.Parameters.AddWithValue("@colorCamisetaSecundario", equipo.colorCamisetaSecundario);
                cmd.Parameters.AddWithValue("@directorTecnico", equipo.directorTecnico);
                if (equipo.delegadoPrincipal != null)
                {
                    cmd.Parameters.AddWithValue("@idDelegadoPrincipal", equipo.delegadoPrincipal.idDelegado);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@idDelegadoPrincipal", DBNull.Value);
                }
                if (equipo.delegadoOpcional != null)
                {
                    cmd.Parameters.AddWithValue("@idDelegadoOpcional", equipo.delegadoOpcional.idDelegado);
                }
                else
                {
                    cmd.Parameters.AddWithValue("@idDelegadoOpcional", DBNull.Value);
                }
                cmd.Parameters.AddWithValue("@idTorneo", idTorneo);
                cmd.CommandText = sql;
                int idEquipo = int.Parse(cmd.ExecuteScalar().ToString());
                trans.Commit();
                return(idEquipo); //retorna el id del equipo generado por la BD
            }
            catch (SqlException ex)
            {   //excepción de BD, por clave unique
                trans.Rollback();
                if (ex.Class == 14 && ex.Number == 2601)
                {
                    throw new Exception("El equipo " + equipo.nombre + " ya se encuentra registrado. Ingrese otro nombre para el equipo.");
                }
                else
                {
                    throw new Exception("No se pudo registrar el equipo: " + ex.Message);
                }
            }
            finally
            {
                if (con != null && con.State == ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }