using System.IO;
using System.Text.Json;
using System.Reflection;
using GsConfigTool.Models;
namespace GsConfigTool.Services;
public static class EngramLibraryService
{
private static readonly Lazy<IReadOnlyList<ArkEngram>> _engrams = new(LoadEngrams);
private static readonly Lazy<IReadOnlyList<ArkLootContainer>> _lootContainers = new(LoadLootContainers);
public static IReadOnlyList<ArkEngram> Engrams => _engrams.Value;
public static IReadOnlyList<ArkLootContainer> LootContainers => _lootContainers.Value;
public static IReadOnlyList<ArkEngram> GetEngramsForGame(GameType gameType)
{
return Engrams.Where(e => e.GameType == "Both" ||
(gameType == GameType.ArkSurvivalEvolved && e.GameType == "ASE") ||
(gameType == GameType.ArkSurvivalAscended && e.GameType == "ASA"))
.ToList();
}
public static IReadOnlyList<ArkLootContainer> GetLootContainersForGame(GameType gameType)
{
return LootContainers.Where(c => c.GameType == "Both" ||
(gameType == GameType.ArkSurvivalEvolved && c.GameType == "ASE") ||
(gameType == GameType.ArkSurvivalAscended && c.GameType == "ASA"))
.ToList();
}
private static IReadOnlyList<ArkEngram> LoadEngrams()
{
try
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "GsConfigTool.Data.ArkEngrams.json";
using var stream = assembly.GetManifestResourceStream(resourceName);
if (stream == null) return Array.Empty<ArkEngram>();
using var reader = new StreamReader(stream);
var json = reader.ReadToEnd();
return JsonSerializer.Deserialize<IReadOnlyList<ArkEngram>>(json) ?? Array.Empty<ArkEngram>();
}
catch
{
return Array.Empty<ArkEngram>();
}
}
private static IReadOnlyList<ArkLootContainer> LoadLootContainers()
{
try
{
var assembly = Assembly.GetExecutingAssembly();
var resourceName = "GsConfigTool.Data.ArkLootContainers.json";
using var stream = assembly.GetManifestResourceStream(resourceName);
if (stream == null) return Array.Empty<ArkLootContainer>();
using var reader = new StreamReader(stream);
var json = reader.ReadToEnd();
return JsonSerializer.Deserialize<IReadOnlyList<ArkLootContainer>>(json) ?? Array.Empty<ArkLootContainer>();
}
catch
{
return Array.Empty<ArkLootContainer>();
}
}
}
public class ArkEngram
{
public string DisplayName { get; set; } = "";
public string ClassName { get; set; } = "";
public string Category { get; set; } = "";
public int PointsCost { get; set; }
public int LevelRequirement { get; set; }
public string GameType { get; set; } = "Both"; // ASE, ASA, Both
}
public class ArkLootContainer
{
public string DisplayName { get; set; } = "";
public string ClassName { get; set; } = "";
public string GameType { get; set; } = "Both"; // ASE, ASA, Both
}