using System.Collections.Generic; using System.IO; using AngleSharp.Dom; using Newtonsoft.Json.Linq; using Pf2e.Database.Model.Base.Targets; using Pf2e.Database.Model.Structure; namespace Pf2e.Scrapper.Importers.Implementations.FoundryEn.Helpers; /// /// Глобальные константы и утилиты для импорта данных в формате Foundry En. /// public class FoundryEnGlobals { /// /// Цель внешних ссылок для Foundry En. /// public ExternalTarget FoundryTarget { get; set; } = null!; /// /// Список идентификаторв пропускаемых сущностей. /// public List Ignore { get; } = []; /// /// Словарей суффиксов для сущностей. /// public Dictionary SlugSuffixes { get; } = []; /// /// Словарь соответствий идентификаторов Aonprd к Foundry En. /// public Dictionary MatchToAonprd { get; } = []; /// /// Конструктор класса . /// public FoundryEnGlobals() { using StreamReader fileReader = new("Resources\\ImportAdaptation.json"); JObject? json = JObject .Parse(fileReader.ReadToEnd()) .SelectToken("Foundry") ?.ToObject(); if (json is not null) { Ignore = json.SelectToken("Ignore")?.ToObject>() ?? []; // JsonToDictionary(json, "Ignore"); SlugSuffixes = JsonToDictionary(json, "SlugSuffixes"); MatchToAonprd = JsonToDictionary(json, "MatchToAonprd"); } } /// /// Получить суффикс для ссылки. /// /// Идентификатор Aonprd. /// Суффикс для ссылки или пустая строка. public string GetSlugSuffix(string id) { return SlugSuffixes.TryGetValue(id, out string? slug) ? $"-{slug}" : string.Empty; } /// /// Преобразовать JSON-объект в словарь. /// /// Исходный JSON-объект. /// Путь к токену в JSON. /// Результирующий словарь. public static Dictionary JsonToDictionary(JObject json, string tokenPath) { return json.SelectToken(tokenPath)?.ToObject>() ?? []; } }