using AutoBidder.Models;
using System.Collections.Concurrent;
namespace AutoBidder.Services
{
///
/// Servizio per gestione stato aste in ambiente Blazor
///
public class AuctionStateService
{
private readonly ConcurrentDictionary _auctions = new();
public event Action? OnStateChanged;
public event Action? OnAuctionUpdated;
public event Action? OnAuctionAdded;
public event Action? OnAuctionRemoved;
public IEnumerable GetAllAuctions() => _auctions.Values;
public AuctionInfo? GetAuction(string auctionId)
{
_auctions.TryGetValue(auctionId, out var auction);
return auction;
}
public void AddAuction(AuctionInfo auction)
{
if (_auctions.TryAdd(auction.AuctionId, auction))
{
OnAuctionAdded?.Invoke(auction.AuctionId);
NotifyStateChanged();
}
}
public void RemoveAuction(string auctionId)
{
if (_auctions.TryRemove(auctionId, out _))
{
OnAuctionRemoved?.Invoke(auctionId);
NotifyStateChanged();
}
}
public void UpdateAuction(string auctionId, Action updateAction)
{
if (_auctions.TryGetValue(auctionId, out var auction))
{
updateAction(auction);
OnAuctionUpdated?.Invoke(auctionId);
NotifyStateChanged();
}
}
private void NotifyStateChanged() => OnStateChanged?.Invoke();
}
}