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(); } }