using PARR.Core.Services.Shortcodes.Enums;
using PARR.Core.Services.Shortcodes.Models;
using System.Text.RegularExpressions;

namespace PARR.Core.Services.Shortcodes.Handlers
{
    public interface IShortcodeHandler
    {
        /// <summary>
        /// Порядок выполнения в пайплайне. 
        /// Меньшее значение = раньше выполнение. Важно для зависимых шорткодов.
        /// </summary>
        int Order { get; }

        /// <summary>
        /// Регулярное выражение для поиска шорткодов, которые обрабатывает этот хендлер.
        /// </summary>
        Regex Pattern { get; }

        /// <summary>
        /// Декларация данных, необходимых хендлеру для работы.
        /// </summary>
        ShortcodeDataRequirementsEnum Requirements { get; }

        /// <summary>
        /// Заменяет все найденные шорткоды в строке на вычисленные значения.
        /// </summary>
        Task<string> ResolveAsync(string input, TemplateForShortcode data, string caller, CancellationToken ct = default);
    }
}
