public IEnumerable <OwPlayer> OwMatchFilter(int PlayerID, [FromUri] owFilter filter)
        {
            List <string> names   = new List <string>();
            List <region> regions = new List <region>();
            List <int>    ids     = new List <int>();
            PlayerGame    p       = null;

            foreach (PlayerGame pg in db.PlayerGames.Where(x => x.IDGame == 1))
            {
                if (pg.IDGamer == PlayerID)
                {
                    p = pg;
                }
                else
                {
                    names.Add(pg.IdAPI);
                    regions.Add(region.us);
                    ids.Add(pg.IDGamer);
                }
            }
            if (p == null)
            {
                return(null);          //BadRequest("Jogador que requisitou o match não consta no banco"); //400
            }
            var player = OwAPI.GetPlayer(p.IdAPI, region.us, p.IDGamer);
            var a      = OwAPI.GetPlayer(names, regions, ids).Where(x => filterPlayer(x, filter));

            return(a);//201
        }
        public IHttpActionResult GetOwMatchFilter(int PlayerID, [FromBody] owFilter filter)
        {
            List <string> names   = new List <string>();
            List <region> regions = new List <region>();
            List <int>    ids     = new List <int>();
            PlayerGame    p       = null;

            foreach (PlayerGame pg in db.PlayerGames.Where(x => x.IDGame == 1))
            {
                if (pg.IDGamer == PlayerID)
                {
                    p = pg;
                }
                else
                {
                    names.Add(pg.IdAPI);
                    regions.Add(region.us);
                    ids.Add(pg.IDGamer);
                }
            }
            if (p == null)
            {
                return(BadRequest());           //400
            }
            var player = OwAPI.GetPlayer(p.IdAPI, region.us, p.IDGamer);
            var a      = OwAPI.GetPlayer(names, regions, ids).Where(x => filterPlayer(x, filter));

            return(Ok(a));//201
        }
        public OwPlayer GetPlayerOwObject(int PlayerID, region Region)
        {
            PlayerGame pg = db.PlayerGames.Where(x => x.IDGamer == PlayerID).FirstOrDefault();

            if (pg == null)
            {
                return(null);
            }
            var a = OwAPI.GetPlayer(pg.IdAPI, Region, PlayerID);

            if (a == null)
            {
                return(null);
            }
            return(a);
        }
        public IHttpActionResult GetPlayerOw(int PlayerID)
        {
            PlayerGame pg = db.PlayerGames.Where(x => x.IDGamer == PlayerID && x.IDGame == (int)Games.Overwatch).FirstOrDefault();

            if (pg == null)
            {
                return(NotFound());
            }
            var a = OwAPI.GetPlayer(pg.IdAPI, region.us, PlayerID);

            if (a == null)
            {
                return(NotFound());
            }
            return(Ok(a));
        }
        public IHttpActionResult GetPlayerOw()
        {
            List <string> names   = new List <string>();
            List <region> regions = new List <region>();
            List <int>    ids     = new List <int>();

            foreach (PlayerGame pg in db.PlayerGames.Where(x => x.IDGame == 1))
            {
                names.Add(pg.IdAPI);
                regions.Add(region.us);
                ids.Add(pg.IDGamer);
                Console.WriteLine(pg.IdAPI);
            }
            var a = OwAPI.GetPlayer(names, regions, ids);

            return(Json(a));
        }
        public async Task <IHttpActionResult> PostPlayerInOw([FromBody] PlayerGame playerGame, [FromUri] region Region)
        {
            if (OwAPI.GetPlayerProfile(playerGame.IdAPI, Region, playerGame.IDGamer) == null)
            {
                return(BadRequest($"{playerGame.IdAPI} não possui conta associada a overwatch ou conta não é publica"));
            }
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            playerGame.Game  = db.Games.Find(playerGame.IDGame);
            playerGame.Gamer = db.Gamers.Find(playerGame.IDGamer);
            db.PlayerGames.Add(playerGame);
            await db.SaveChangesAsync();

            return(Ok(playerGame));
        }
        public IHttpActionResult GetNearPlayer(int PlayerID, bool Competitive, float percent)
        {
            Graph <Player, Match, string> graph = new Graph <Player, Match, string>((Match e) => { return(e.Weight != 0 ? 1 / e.Weight : float.MaxValue); });

            PlayerGame currentPlayer = db.PlayerGames.Where(x => x.IDGamer == PlayerID).FirstOrDefault();

            foreach (var m in db.Matches.ToArray())
            {
                var p1 = db.PlayerGames.Where(x => x.IDGamer == m.IdPlayer1 && x.IDGame == (int)Games.Overwatch).FirstOrDefault();
                var p2 = db.PlayerGames.Where(x => x.IDGamer == m.IdPlayer2 && x.IDGame == (int)Games.Overwatch).FirstOrDefault();

                if (p1 != null && p2 != null)
                {
                    graph.AddVertice(m.Player1, p1.IdAPI);
                    graph.AddVertice(m.Player2, p2.IdAPI);
                    graph.AddAresta(p1.IdAPI, p2.IdAPI, m);
                }
            }

            OwPlayer    owPlayer = OwAPI.GetPlayer(currentPlayer.IdAPI, region.us, PlayerID);
            careerStats career   = Competitive ? owPlayer.compCareer : owPlayer.quickCareer;
            float       perc     = percent / 100.0f;

            owFilter filter = new owFilter
            {
                competitive = Competitive,
                damage      = new float[] { career.allDamageDone *(1.0f - perc), career.allDamageDone *(1.0f + perc) },
                rating      = new int[] { (int)(owPlayer.profile.rating * (1.0f - perc)), (int)(owPlayer.profile.rating * (1.0f + perc)) },
                elimination = new int[] { (int)(career.eliminations * (1.0f - perc)), (int)(career.eliminations * (1.0f + perc)) },
            };

            var             sorted  = graph.ShortPath(currentPlayer.IdAPI).OrderBy(x => x.Value).Skip(1).Take(graph.vertCount);
            List <OwPlayer> players = new List <OwPlayer>(sorted.Count());

            foreach (var v in sorted)
            {
                OwPlayer pp = OwAPI.GetPlayer(v.Key, region.us, 0);
                if (filterPlayer(pp, filter))
                {
                    players.Add(pp);
                }
            }

            return(Ok(players));
        }