using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
using Pf2e.Database.Model.Enum;
using Pf2e.Scrapper.Processors;
namespace Pf2e.Scrapper.Importers.Implementations.Aonprd.Helpers;
///
/// Класс-расширение для .
///
public static class AonprdProcessorInputExtension
{
///
/// Обработать строку, содержащую информацию о количестве действий.
///
///
/// Входная строка с данными.
/// Структура, хранящая информацию о количетсве действий.
public static ActionStruct ResolveActionString(this ProcessorInput _, string input)
{
ActionStruct result = new();
switch (input)
{
case "Single Action":
result.Actions = result.MaxActions = 1;
break;
case "Two Actions":
result.Actions = result.MaxActions = 2;
break;
case "Three Actions":
result.Actions = result.MaxActions = 3;
break;
case "Reaction":
result.IsReaction = true;
break;
case "Free Action":
result.IsFreeAction = false;
break;
case "Single Action to Three Actions":
case "Single Action or more Actions":
result.Actions = 1;
result.MaxActions = 3;
break;
case "Single Action or Two Actions":
case "Single Action to Two Actions":
result.Actions = 1;
result.MaxActions = 2;
break;
case "Two Actions or Three Actions":
result.Actions = 2;
result.MaxActions = 3;
break;
case "Two Actions to 2 rounds":
result.Actions = 2;
result.MaxActions = 3;
result.TwoRounds = true;
break;
case "Reaction or One Action":
result.IsReaction = true;
result.Actions = result.MaxActions = 1;
break;
case "Reaction or Two Actions":
result.IsReaction = true;
result.Actions = result.MaxActions = 2;
break;
case "Free Action or One Action":
result.IsFreeAction = false;
result.Actions = result.MaxActions = 1;
break;
default:
result.IsPassive = true;
break;
}
return result;
}
///
/// Класс структуры, хранящей информацию о количетсве действий.
///
public class ActionStruct
{
///
/// Количество действий
///
public int Actions { get; set; }
///
/// Максимальное количество действий
///
public int MaxActions { get; set; }
///
/// Флаг, указывающий, что действия не требуются.
///
public bool IsPassive { get; set; }
///
/// Флаг, указывающий, что действие может быть использовано как реакция.
///
public bool IsReaction { get; set; }
///
/// Флаг, указывающий, что можно использовать свободное действие.
///
public bool IsFreeAction { get; set; }
///
/// Флаг, указывающий, что действие может быть продлено до 2 раундов.
///
public bool TwoRounds { get; set; }
}
///
/// Разрешитель перечисления .
///
public class SourceCategorySolver : EnumSolver
{
///
public override Dictionary Data { get; } =
new()
{
{ "Rulebooks", SourceCategory.Rulebooks },
{ "Adventure Paths", SourceCategory.AdventurePaths },
{ "Lost Omens", SourceCategory.LostOmens },
{ "Adventures", SourceCategory.Adventures },
{ "Comics", SourceCategory.Comics },
{ "Blog Posts", SourceCategory.BlogPosts },
{ "Society", SourceCategory.Society },
};
}
///
/// Разрешитель перечисления .
///
public class VisionEnumSolver : EnumSolver
{
///
public override Dictionary Data { get; } =
new()
{
{ "Low-Light VisionEnum", VisionEnum.LowLightVision },
{ "Darkvision", VisionEnum.DarkVision },
};
}
///
/// Разрешитель перечисления .
///
public class AttributeValuesSolver : EnumSolver
{
///
public override Dictionary Data { get; } =
new()
{
{ "Consitution", AttributeValues.Constitution },
{ "Other", AttributeValues.Free },
{ "other", AttributeValues.Free },
};
}
///
/// Разрешитель перечисления .
///
public class ActionEnumSolver : EnumSolver
{
///
public override Dictionary Data { get; } =
new()
{
{ "Single Action", ActionEnum.SingleAction },
{ "Two Actions", ActionEnum.TwoActions },
{ "Three Actions", ActionEnum.ThreeActions },
{ "Reaction", ActionEnum.Reaction },
{ "Free Action", ActionEnum.FreeAction },
{ "Single Action to Three Actions", ActionEnum.SingleActionToThreeActions },
{ "Single Action or more Actions", ActionEnum.SingleActionToThreeActions },
{ "Single Action or Two Actions", ActionEnum.SingleActionToTwoActions },
{ "Single Action to Two Actions", ActionEnum.SingleActionToTwoActions },
{ "Two Actions or Three Actions", ActionEnum.TwoActionsToThreeActions },
{ "Two Actions to 2 rounds", ActionEnum.TwoActionsToTwoRounds },
{ "Reaction or One Action", ActionEnum.ReactionOrOneAction },
{ "Reaction or Two Actions", ActionEnum.ReactionOrTwoAction },
{ "Reaction or Three Actions", ActionEnum.ReactionOrThreeAction },
{ "Free Action or One Action", ActionEnum.FreeActionOrOneAction },
{ "1 Minute", ActionEnum.OneMinute },
{ "1 minute", ActionEnum.OneMinute },
{ "5 minutes", ActionEnum.FiveMinutes },
{ "10 minutes", ActionEnum.TenMinutes },
{ "30 minutes", ActionEnum.ThirtyMinutes },
{ "1 hour", ActionEnum.OneHour },
{ "Nethys Note: No cast time was printed", ActionEnum.Unknown },
};
}
///
/// Регистрирует службы разрешителей перечислений в контейнере служб.
///
/// Коллекция служб.
public static void RegisterServices(IServiceCollection serviceCollection)
{
serviceCollection.AddTransient();
serviceCollection.AddTransient();
serviceCollection.AddTransient();
serviceCollection.AddTransient();
}
}