@* Reusable toast notification component *@
@implements IDisposable

<div class="position-fixed bottom-0 end-0 p-3" style="z-index: 1090;">
    @foreach (var toast in _toasts)
    {
        <div class="toast show mb-2" role="alert">
            <div class="toast-header @GetHeaderClass(toast.Type)">
                <strong class="me-auto">@toast.Title</strong>
                <button type="button" class="btn-close btn-close-white" @onclick="() => Dismiss(toast)"></button>
            </div>
            <div class="toast-body">@toast.Message</div>
        </div>
    }
</div>

@code {
    private readonly List<ToastItem> _toasts = new();
    private readonly object _lock = new();

    public void ShowSuccess(string message, string title = "Success")
    {
        AddToast(title, message, ToastType.Success);
    }

    public void ShowError(string message, string title = "Error")
    {
        AddToast(title, message, ToastType.Error);
    }

    public void ShowWarning(string message, string title = "Warning")
    {
        AddToast(title, message, ToastType.Warning);
    }

    public void ShowInfo(string message, string title = "Info")
    {
        AddToast(title, message, ToastType.Info);
    }

    private void AddToast(string title, string message, ToastType type)
    {
        var toast = new ToastItem { Title = title, Message = message, Type = type };
        lock (_lock)
        {
            _toasts.Add(toast);
        }
        StateHasChanged();

        // Auto-dismiss after 5 seconds
        _ = Task.Delay(5000).ContinueWith(_ =>
        {
            lock (_lock)
            {
                _toasts.Remove(toast);
            }
            InvokeAsync(StateHasChanged);
        });
    }

    private void Dismiss(ToastItem toast)
    {
        lock (_lock)
        {
            _toasts.Remove(toast);
        }
    }

    private static string GetHeaderClass(ToastType type) => type switch
    {
        ToastType.Success => "bg-success text-white",
        ToastType.Error => "bg-danger text-white",
        ToastType.Warning => "bg-warning text-dark",
        ToastType.Info => "bg-info text-dark",
        _ => "bg-secondary text-white"
    };

    public void Dispose() { }

    private enum ToastType { Success, Error, Warning, Info }

    private class ToastItem
    {
        public string Title { get; init; } = "";
        public string Message { get; init; } = "";
        public ToastType Type { get; init; }
    }
}
