using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Localization; using Radzen; using Radzen.Blazor; using WotBlitzStatisticsPro.Blazor.GraphQl; using WotBlitzStatisticsPro.Blazor.Helpers; using WotBlitzStatisticsPro.Blazor.Model; namespace WotBlitzStatisticsPro.Blazor.Pages { public class PlayerInfoTanksListBase: ComponentBase { [Parameter] public IEnumerable TanksList { get; set; } [Inject] public TooltipService TooltipService { get; set; } [Inject] public IStringLocalizer Localize { get; set; } public RadzenDataGrid TanksGrid { get; set; } public IEnumerable FilteredTankList { get; set; } public List> TierFilter { get; set; } = new(); public IEnumerable FilteredTiers { get; set; } = new int[] { }; public List> TankTypesFilter { get; set; } = new(); public IEnumerable FilteredTankTypes { get; set; } = new string[] { }; public bool? FilterIsPremium { get; set; } = null; public List> NationsFilter { get; set; } = new(); public IEnumerable FilteredNations { get; set; } = new string[] { }; public List> MasteryFilter { get; set; } = new(); public IEnumerable FilteredMastery { get; set; } = new MarkOfMastery[] { }; public int TotalBattles { get; set; } public int AvgWinRate { get; set; } public double AvgWn7 { get; set; } public int AvgTotalDamage { get; set; } public int AvgTotalXp { get; set; } public int AvgSurvivalRate { get; set; } public int? MinBattles { get; set; } = null; protected override void OnInitialized() { FilteredTankList = TanksList; CountTotalParams(); for (int i = 1; i < 11; i++) { TierFilter.Add(new FilterItem(i, i.RomanNumber())); } FillTankTypesFilter(); FillNationsFilter(); FillMasteryFilter(); } public void ShowTooltip(ElementReference elementReference, string message, TooltipOptions options = null) => TooltipService.Open(elementReference, message, options); public void OnFilterChange(object value) { FilteredTankList = TanksList; if (FilteredTiers.Any()) { FilteredTankList = FilteredTankList.Where(t => FilteredTiers.Contains(t.Tier)); } if (FilteredTankTypes.Any()) { FilteredTankList = FilteredTankList.Where(t => FilteredTankTypes.Contains(t.TankTypeId)); } if (FilterIsPremium.HasValue) { FilteredTankList = FilteredTankList.Where(t => t.IsPremium == FilterIsPremium.Value); } if (FilteredNations.Any()) { FilteredTankList = FilteredTankList.Where(t => FilteredNations.Contains(t.TankNationId)); } if (FilteredMastery.Any()) { FilteredTankList = FilteredTankList.Where(t => FilteredMastery.Contains(t.MarkOfMastery)); } if (MinBattles.HasValue) { FilteredTankList = FilteredTankList.Where(t => t.Battles > MinBattles.Value); } CountTotalParams(); } private void FillTankTypesFilter() { // ToDo: Should get values from Dictionary here instead of hard code TankTypesFilter.Add(new FilterItem(Constants.HeavyTank, Constants.HeavyTank.TankTypeAsset(false))); TankTypesFilter.Add(new FilterItem(Constants.AtSpg, Constants.AtSpg.TankTypeAsset(false))); TankTypesFilter.Add(new FilterItem(Constants.MediumTank, Constants.MediumTank.TankTypeAsset(false))); TankTypesFilter.Add(new FilterItem(Constants.LightTank, Constants.LightTank.TankTypeAsset(false))); } private void FillNationsFilter() { // ToDo: Should get values from Dictionary here instead of hard code NationsFilter.Add(new FilterItem(Constants.CountryUsa, Constants.CountryUsa.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryFrance, Constants.CountryFrance.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryUssr, Constants.CountryUssr.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryChina, Constants.CountryChina.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryUk, Constants.CountryUk.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryJapan, Constants.CountryJapan.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryGermany, Constants.CountryGermany.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryOther, Constants.CountryOther.NationAsset())); NationsFilter.Add(new FilterItem(Constants.CountryEuropean, Constants.CountryEuropean.NationAsset())); } private void FillMasteryFilter() { foreach (MarkOfMastery mastery in Enum.GetValues(typeof(MarkOfMastery))) { MasteryFilter.Add(new FilterItem(mastery, mastery.IconAsset())); } } private void CountTotalParams() { TotalBattles = Convert.ToInt32(FilteredTankList.Sum(t => t.Battles)); if (TotalBattles > 0) { AvgWinRate = Convert.ToInt32(100 * FilteredTankList.Sum(t => t.Wins) / TotalBattles); AvgWn7 = Convert.ToDouble(FilteredTankList.Sum(t => t.Wn7)) / FilteredTankList.Count(); AvgTotalDamage = Convert.ToInt32(FilteredTankList.Sum(t => t.DamageDealt) / TotalBattles); AvgTotalXp = Convert.ToInt32(FilteredTankList.Sum(t => t.Xp) / TotalBattles); AvgSurvivalRate = Convert.ToInt32(100 * FilteredTankList.Sum(t => t.WinAndSurvived) / TotalBattles); } else { AvgWinRate = 0; AvgWn7 = 0; AvgTotalDamage = 0; AvgTotalXp = 0; AvgSurvivalRate = 0; } } } }