//Contribution: Orchard project (https://github.com/OrchardCMS/OrchardCore)

using Microsoft.AspNetCore.Html;

namespace Grand.Web.Common.TagHelpers;

public interface IResourceManager
{
    /// <summary>
    ///     Registers a script tag on the head
    /// </summary>
    /// <param name="script"></param>
    /// <param name="order"></param>
    void RegisterHeadScript(IHtmlContent script, int order);

    /// <summary>
    ///     Registers a custom script tag on at the header.
    /// </summary>
    void RegisterHeaderScript(IHtmlContent script, int order);

    /// <summary>
    ///     Registers a custom script tag on at the foot.
    /// </summary>
    /// <param name="script"></param>
    /// <param name="order"></param>
    void RegisterFootScript(IHtmlContent script, int order);

    /// <summary>
    ///     Registers a custom template tag in the head/footer.
    /// </summary>
    /// <param name="script"></param>
    /// <param name="head"></param>
    void RegisterTemplate(IHtmlContent script, bool head);

    /// <summary>
    ///     Returns the registered head script resources.
    /// </summary>
    IEnumerable<IHtmlContent> GetRegisteredHeadScripts();

    /// <summary>
    ///     Returns the registered header script resources.
    /// </summary>
    IEnumerable<IHtmlContent> GetRegisteredHeaderScripts();

    /// <summary>
    ///     Returns the registered footer script resources.
    /// </summary>
    IEnumerable<IHtmlContent> GetRegisteredFootScripts();

    /// <summary>
    ///     Renders the registered header script tags.
    /// </summary>
    void RenderHeadScript(IHtmlContentBuilder builder);

    /// <summary>
    ///     Renders the registered header script tags.
    /// </summary>
    void RenderHeaderScript(IHtmlContentBuilder builder);

    /// <summary>
    ///     Renders the registered footer script tags.
    /// </summary>
    void RenderFootScript(IHtmlContentBuilder builder);

    /// <summary>
    ///     Renders the registered header link tags.
    /// </summary>
    void RenderHeadLink(IHtmlContentBuilder builder);

    /// <summary>
    ///     Renders the registered template tags.
    /// </summary>
    void RenderTemplate(IHtmlContentBuilder builder, bool head);

    /// <summary>
    ///     Registers a link tag.
    /// </summary>
    void RegisterLink(LinkEntry link);
}