public PlayersDataManager(PlayersContextViewModel pc, PlayersFeatureViewModel pvm, CacheFileManager fm, ContextCacheManager c) 
 {
     _playersContext = pc;
     _playersViewModel = pvm;
     _fileManager = fm;
     _cacheManager = c;
 }
 public async Task<bool> SavePlayersContextAsync(PlayersContextViewModel context)
 {
     bool returnValue = true;
     var jsonString = JsonConvert.SerializeObject(context);
     returnValue = await _fileManager.CacheUpdateAsync(Config.PC_CacheFileKey, jsonString);
     return returnValue;
 }
        public PlayersFeature()
        {
            this.InitializeComponent();

            this.navigationHelper = new NavigationHelper(this);
            this.navigationHelper.LoadState += this.NavigationHelper_LoadState;
            this.navigationHelper.SaveState += this.NavigationHelper_SaveState;

            playersContext = PlayersContextViewModel.Instance;
        }
        public void ReHydrateMe(PlayersContextViewModel cache)
        {
            PlayersContextViewModel gospel = PlayersContextViewModel.Instance;

            gospel.LastYearId = cache.LastYearId;
            gospel.LastTeamId = cache.LastTeamId;
            gospel.LastBatterId = cache.LastBatterId;
            gospel.LastSearchBatterId = cache.LastSearchBatterId;
            gospel.LastSearchPitcherId = cache.LastSearchPitcherId;
            gospel.LastDrillDownBatterId = cache.LastDrillDownBatterId;
            gospel.LastDrillDownPitcherId = cache.LastDrillDownPitcherId;
            gospel.LastDrillDownResultYearId = cache.LastDrillDownResultYearId;

            gospel.SelectedYearId = cache.SelectedYearId;
            gospel.SelectedTeamId = cache.SelectedTeamId;
            gospel.SelectedBatterId = cache.SelectedBatterId;
            gospel.SelectedPitcherId = cache.SelectedPitcherId;
            gospel.SelectedGameYear = cache.SelectedGameYear;
        }
        public PlayersFeature()
        {
            InitializeComponent();

            playersContext = PlayersContextViewModel.Instance;
        }
        public async Task<bool> LoadPlayerDrillDownDataAsync(PlayersContextViewModel context, string cachedJson = "")
        {
            List<PlayersDrillDownModel> items;

            if (string.IsNullOrEmpty(cachedJson))
            {
                var dataContext = new DataContext();
                var svcResult = string.Empty;

                svcResult = await dataContext.GetPlayerDrillDownAsync(context.SelectedBatterId, context.SelectedPitcherId, context.SelectedGameYear);
                if (svcResult == null) { return false; } //no results message
                //PlayersDrillDownDataString = svcResult;
                items = JsonConvert.DeserializeObject<List<PlayersDrillDownModel>>(svcResult);
            }
            else
            {
                items = JsonConvert.DeserializeObject<List<PlayersDrillDownModel>>(cachedJson);
            } 

            var groupedItems =
                from item in items
                orderby item.GameDate descending
                select new PlayersDrillDownViewModel
                {
                    GameDate = item.GameDate,
                    AtBat = item.AtBat,
                    Hit = item.Hit,
                    Walks = item.Walks,
                    SecondBase = item.SecondBase,
                    ThirdBase = item.ThirdBase,
                    HomeRun = item.HomeRun,
                    RunBattedIn = item.RunBattedIn,
                    StrikeOut = item.StrikeOut,
                    Average = item.Average.ToString("N3", CultureInfo.InvariantCulture).TrimStart('0')
                } into list
                group list by list.GameDate into listByYear
                select new KeyedList<string, PlayersDrillDownViewModel>(listByYear);

            PlayerDrillDownItems.Clear();
            foreach (var viewModelItem in groupedItems)
            {
                PlayerDrillDownItems.Add(viewModelItem);
            }
            return true;
        }
        public async Task<bool> LoadPitcherDataAsync(PlayersContextViewModel context, string cachedJson = "")
        {
            List<PitcherModel> pitchers;

            if (string.IsNullOrEmpty(cachedJson))
            {
                var dataContext = new DataContext();
                var svcResult = string.Empty;

                svcResult = await dataContext.GetPitchersAsync(context.SelectedBatterId, context.SelectedYearId);
                if (svcResult == null) { return false; } //no results message
                //PitchersDataString = svcResult;
                pitchers = JsonConvert.DeserializeObject<List<PitcherModel>>(svcResult);
            }
            else
            {
                pitchers = JsonConvert.DeserializeObject<List<PitcherModel>>(cachedJson);
            } 

            var groupedItems =
                from pitcher in pitchers
                orderby pitcher.FirstName
                select new PlayersPitchersViewModel
                {
                    FirstLetter = pitcher.FirstName.Substring(0, 1),
                    LineOne = pitcher.GetDisplayName(),
                    PitcherId = pitcher.RetroId
                } into list
                group list by list.FirstLetter into listByYear
                select new KeyedList<string, PlayersPitchersViewModel>(listByYear);

            PitcherItems.Clear();
            foreach (var viewModelItem in groupedItems)
            {
                PitcherItems.Add(viewModelItem);
            }
            return true;
        }
        public async Task<bool> LoadTeamDataAsync(PlayersContextViewModel context, string cachedJson = "")
        {
            List<TeamModel> teams;

            if (string.IsNullOrEmpty(cachedJson))
            {
                var dataContext = new DataContext();
                var svcResult = string.Empty;

                svcResult = await dataContext.GetTeamsAsync(context.SelectedYearId);
                if (svcResult == null) { return false; } //no results message
                //TeamsDataString = svcResult;
                teams = JsonConvert.DeserializeObject<List<TeamModel>>(svcResult);
            }
            else
            {
                teams = JsonConvert.DeserializeObject<List<TeamModel>>(cachedJson);
            } 
            
            var groupedItems =
                from team in teams
                orderby team.Location
                select new PlayersTeamsViewModel
                {
                    FirstLetter = team.Location.Substring(0, 1),
                    LineOne = team.GetDisplayName(),
                    LineTwo = team.GetDetail(),
                    TeamId = team.TeamId
                } into list
                group list by list.FirstLetter into listByYear
                select new KeyedList<string, PlayersTeamsViewModel>(listByYear);

            TeamItems.Clear();
            foreach (var viewModelItem in groupedItems)
            {
                TeamItems.Add(viewModelItem);
            }
            return true;
        }
        /*
        public string YearsDataString { get; set; }
        public string TeamsDataString { get; set; }
        public string BattersDataString { get; set; }
        public string PitchersDataString { get; set; }
        public string PlayersResultsDataString { get; set; }
        public string PlayersDrillDownDataString { get; set; }
        */

        public async Task<bool> LoadYearDataAsync(PlayersContextViewModel context, string cachedJson = "")
        {
            List<YearModel> years;

            if (string.IsNullOrEmpty(cachedJson))
            {
                var dataContext = new DataContext();
                var svcResult = string.Empty;

                svcResult = await dataContext.GetYearsAsync();
                if (svcResult == null) { return false; } //no results message
                //YearsDataString = svcResult;
                years = JsonConvert.DeserializeObject<List<YearModel>>(svcResult);
            }
            else
            {
                years = JsonConvert.DeserializeObject<List<YearModel>>(cachedJson);
            }

            YearItems.Clear();
            foreach (var year in years)
            {
                this.YearItems.Add(new PlayersYearsViewModel() { LineOne = year.Id.ToString(CultureInfo.CurrentCulture) });
            }
            return true;
        }