using DevExpress.Blazor;
using DevExpress.Blazor.Internal;

namespace FruitBankHybrid.Shared.Extensions;

public static class DevexpressComponentExtensions
{
    public static async Task ShowMessageBoxAsync(this IDialogService messageBox, string title, string text, MessageBoxRenderStyle messageBoxRenderStyle)
    {
        var messageBoxOptions = CreateMessageBoxOptions(title, text, messageBoxRenderStyle);

        await messageBox.AlertAsync(messageBoxOptions);
    }

    /// <summary>Több-üzenetes messagebox: minden üzenet KÜLÖN SORBAN jelenik meg. A sima <c>Text</c>-be fűzött
    /// sortörések a HTML-renderelésnél szóközzé olvadnának — a <c>CssClass</c> + a <c>white-space: pre-line</c>
    /// szabály (app.css: <c>.fb-msgbox-multiline</c>) tartja meg őket. (A <c>MessageBoxOptions</c>-nek nincs
    /// BodyTemplate-je, ezért CSS-megoldás.)</summary>
    public static async Task ShowMessageBoxAsync(this IDialogService messageBox, string title, IReadOnlyCollection<string> lines, MessageBoxRenderStyle messageBoxRenderStyle)
    {
        // "• " prefix = lista-hatás (a MessageBoxOptions csak sima szöveget tud, <ul>/<li> nem lehetséges).
        var messageBoxOptions = CreateMessageBoxOptions(title, string.Join(Environment.NewLine, lines.Select(l => $"• {l}")), messageBoxRenderStyle);
        messageBoxOptions.CssClass = "fb-msgbox-multiline";

        await messageBox.AlertAsync(messageBoxOptions);
    }

    public static async Task<bool> ShowConfirmBoxAsync(this IDialogService messageBox, string title, string text, MessageBoxRenderStyle messageBoxRenderStyle)
    {
        var messageBoxOptions = CreateMessageBoxOptions(title, text, messageBoxRenderStyle);

        return await messageBox.ConfirmAsync(messageBoxOptions);
    }

    private static MessageBoxOptions CreateMessageBoxOptions(string title, string text, MessageBoxRenderStyle messageBoxRenderStyle)
    {
        var messageBoxOptions = new MessageBoxOptions
        {
            Title = title,
            Text = text,
            RenderStyle = messageBoxRenderStyle,
            ShowIcon = false
        };
        return messageBoxOptions;
    }
}