public void TestGetWeeklyPlayerStats()
 {
     var wrapper = new Api.ApiWrapper("nfl");
     var stats   = wrapper.GetWeeklyStatsByPlayer("5479", "2013", 1);
 }
        public void TestFillWeeklyStatsForOffensivePlayers()
        {
            var wrapper = new Api.ApiWrapper("nfl");

            using (var context = new FantasyContext())
            {
                var players     = context.Players.ToList();
                var playerStats = context.Stats.ToList();
                var noStats     = context.NoStats.ToList();

                //var years = Enumerable.Range(2001, 13).OrderByDescending(i => i).ToList();
                var years = Enumerable.Range(2011, 1).OrderByDescending(i => i).ToList();
                var weeks = Enumerable.Range(1, 17).ToList();

                var positions = new List <SimplePositionTypes>
                {
                    SimplePositionTypes.Quarterback,
                    SimplePositionTypes.Runningback,
                    SimplePositionTypes.Receiver,
                    SimplePositionTypes.TightEnd,
                    SimplePositionTypes.Kicker
                };

                var validPlayers = from pl in players
                                   join po in positions
                                   on pl.PrimaryPosition equals po
                                   select pl;

                foreach (var player in validPlayers)
                {
                    foreach (var year in years)
                    {
                        foreach (var week in weeks)
                        {
                            var shouldPull =
                                !playerStats.Any(ps => ps.Player.YahooPlayerId == player.YahooPlayerId &&
                                                 ps.Year.Year == year && ps.Week == week) &&
                                !noStats.Any(ns => ns.Player == player &&
                                             ns.Week == week && ns.Year == year);

                            if (!shouldPull)
                            {
                                continue;
                            }

                            var stats = new StatWrapper();
                            try
                            {
                                stats = wrapper.GetWeeklyStatsByPlayer(player.YahooPlayerId.ToString(), year.ToString(), week);
                            }
                            catch (KeyNotFoundException ex)
                            {
                                var noStat = new NoStats
                                {
                                    Player = player,
                                    Week   = week,
                                    Year   = year
                                };
                                context.NoStats.Add(noStat);
                                context.SaveChanges();
                                continue;
                            }
                            catch
                            {
                                continue;
                            }

                            if (stats.Stats == null)
                            {
                                continue;
                            }

                            if (stats != null)
                            {
                                var simpleStat = new SimpleStats
                                {
                                    Player           = player,
                                    Year             = new DateTime(year, 1, 1),
                                    Week             = week,
                                    TeamName         = stats.Team ?? "",
                                    TeamAbbreviation = stats.TeamAbbr ?? "",
                                    Position         = player.PrimaryPosition == null ? 0 : player.PrimaryPosition
                                };

                                foreach (var stat in stats.Stats)
                                {
                                    var props = simpleStat.GetType().GetProperties();
                                    foreach (var prop in props)
                                    {
                                        if (prop.CustomAttributes.Any(p => p.AttributeType == typeof(PlayerMappingAttribute)))
                                        {
                                            var attr   = prop.GetCustomAttributes(typeof(PlayerMappingAttribute), false).FirstOrDefault();
                                            var statId = ((PlayerMappingAttribute)attr).YahooStatId;

                                            if (stat.StatDetail.StatId == statId)
                                            {
                                                if (prop.PropertyType == typeof(int?))
                                                {
                                                    int nullableValue = 0;
                                                    int.TryParse(stat.StatDetail.Value, out nullableValue);
                                                    prop.SetValue(simpleStat, nullableValue);
                                                }
                                                else
                                                {
                                                    var statValue = Convert.ChangeType(stat.StatDetail.Value, prop.PropertyType);
                                                    prop.SetValue(simpleStat, statValue);
                                                }
                                            }
                                        }
                                    }
                                }

                                context.Stats.Add(simpleStat);
                                context.SaveChanges();
                            }
                        }
                    }
                }
            }
        }