@implements IDisposable;

@inject IToastService toastService

@if (toastService.HasToasts())
{
    <div class="toastsContainer">
        @foreach (var toast in Toasts)
        {
            <ToastComponent Toast="toast"/>
        }
    </div>
}

<style>
    .toastsContainer {
        position: fixed;
        top: 64px;
        right: 64px;
        display: flex;
        flex-direction: column;
        gap: 5px;
    }
</style>


@code {
    private List<ToastModel> Toasts => toastService.GetToasts();

    private Timer ageTimer = null!;

    protected override void OnInitialized()
    {
        toastService.Subscribe(OnUpdate);

        ageTimer = new Timer(10);
        ageTimer.Elapsed += OnAge!;
        ageTimer.Enabled = true;
    }

    public void Dispose()
    {
        toastService.Unsubscribe(OnUpdate);
    }


    void OnAge(object? sender, ElapsedEventArgs elapsedEventArgs)
    {
        toastService.AgeToasts();
        ageTimer.Enabled = true;
    }


    void OnUpdate()
    {
        StateHasChanged();
    }

}