using System; using System.Linq; using System.Threading.Tasks; using WotBlitzStatisticsPro.DataAccess; using WotBlitzStatisticsPro.Logic.AccountInformationPipeline.OperationContext; using WotBlitzStatisticsPro.Logic.Calculations; using WotBlitzStatisticsPro.Logic.Pipeline; namespace WotBlitzStatisticsPro.Logic.AccountInformationPipeline.Operations { public class CalculateStatisticsOperation : IOperation { private readonly IDictionariesDataAccessor _dictionariesDataAccessor; public CalculateStatisticsOperation(IDictionariesDataAccessor dictionariesDataAccessor) { _dictionariesDataAccessor = dictionariesDataAccessor; } public async Task Invoke(IOperationContext context, Func? next) { var contextData = context.Get(); if (contextData?.AccountInfo == null || contextData?.AccountInfoHistory == null || contextData?.Tanks == null || contextData?.TanksHistory == null) { return; } var tankIds = contextData.Tanks.Select(t => t.TankId).ToArray(); var tankTires = await _dictionariesDataAccessor.GetTankTires(tankIds); foreach (var tankInfoHistory in contextData.TanksHistory) { if (!tankTires.ContainsKey(tankInfoHistory.Key)) { continue; } tankInfoHistory.Value.CalculateWn7(tankTires[tankInfoHistory.Key]); } contextData.AccountInfoHistory.CalculateMiddleTier(contextData.TanksHistory.Values.ToList(), tankTires); contextData.AccountInfoHistory.CalculateWn7(); if (next != null) await next.Invoke(context); } } }