using System.Collections.Generic; using System.Collections.Immutable; using WingsEmu.Core.Extensions; using WingsEmu.Game._enum; namespace WingsEmu.Game.Configurations; public interface IBankReputationConfiguration { public BankRankInfo GetBankRankInfo(ReputationType reputationType); public BankPenaltyInfo GetBankPenaltyInfo(ReputationType reputationType); } public class BankReputationConfiguration : IBankReputationConfiguration { private readonly ImmutableDictionary _penaltiesByReputation; private readonly ImmutableDictionary _ranksByReputation; public BankReputationConfiguration(BankReputationInfo bankReputationInfo) { bankReputationInfo ??= new BankReputationInfo { BankRanks = new List(), BankPenalties = new List() }; var bankRankTypes = new Dictionary(); foreach (BankRankInfo bankRankInfo in bankReputationInfo.BankRanks ?? new List()) { foreach (ReputationType reputation in bankRankInfo.Reputations ?? new List()) { bankRankTypes.TryAdd(reputation, bankRankInfo); } } _ranksByReputation = bankRankTypes.ToImmutableDictionary(); _penaltiesByReputation = (bankReputationInfo.BankPenalties ?? new List()).ToImmutableDictionary(s => s.Reputation); } public BankRankInfo GetBankRankInfo(ReputationType reputationType) => _ranksByReputation.GetOrDefault(reputationType); public BankPenaltyInfo GetBankPenaltyInfo(ReputationType reputationType) => _penaltiesByReputation.GetOrDefault(reputationType); } public class BankReputationInfo { public List BankRanks { get; set; } public List BankPenalties { get; set; } } public class BankRankInfo { public BankRankType BankRank { get; set; } public List Reputations { get; set; } } public class BankPenaltyInfo { public ReputationType Reputation { get; set; } public int GoldCost { get; set; } }