2025-01-11 11:50:02 +03:00
|
|
|
|
using System.Globalization;
|
|
|
|
|
using LootDumpProcessor.Model;
|
2025-01-11 09:12:21 +03:00
|
|
|
|
using LootDumpProcessor.Model.Processing;
|
|
|
|
|
|
|
|
|
|
namespace LootDumpProcessor.Process;
|
|
|
|
|
|
2025-01-11 11:50:02 +03:00
|
|
|
|
public class ComposedKeyGenerator(ITarkovItemsProvider tarkovItemsProvider, IKeyGenerator keyGenerator)
|
|
|
|
|
: IComposedKeyGenerator
|
2025-01-11 09:12:21 +03:00
|
|
|
|
{
|
|
|
|
|
private readonly ITarkovItemsProvider _tarkovItemsProvider =
|
|
|
|
|
tarkovItemsProvider ?? throw new ArgumentNullException(nameof(tarkovItemsProvider));
|
|
|
|
|
|
2025-01-11 11:50:02 +03:00
|
|
|
|
private readonly IKeyGenerator
|
|
|
|
|
_keyGenerator = keyGenerator ?? throw new ArgumentNullException(nameof(keyGenerator));
|
|
|
|
|
|
|
|
|
|
public ComposedKey Generate(IReadOnlyList<Item>? items)
|
2025-01-11 09:12:21 +03:00
|
|
|
|
{
|
|
|
|
|
var key = items?.Select(i => i.Tpl)
|
|
|
|
|
.Where(i => !string.IsNullOrEmpty(i) &&
|
|
|
|
|
!_tarkovItemsProvider.IsBaseClass(i, BaseClasses.Ammo))
|
|
|
|
|
.Cast<string>()
|
|
|
|
|
.Select(i => (double)i.GetHashCode())
|
|
|
|
|
.Sum()
|
2025-01-11 11:50:02 +03:00
|
|
|
|
.ToString(CultureInfo.InvariantCulture) ?? _keyGenerator.Generate();
|
|
|
|
|
var firstItem = items?[0];
|
|
|
|
|
|
2025-01-11 09:12:21 +03:00
|
|
|
|
return new ComposedKey(key, firstItem);
|
|
|
|
|
}
|
|
|
|
|
}
|