using CommunityToolkit.Mvvm.Messaging; using Wino.Core.Domain.Entities.Calendar; using Wino.Core.Domain.Enums; using Wino.Core.Domain.Models.Requests; using Wino.Messaging.Client.Calendar; namespace Wino.Core.Requests.Calendar; /// /// Request to decline a calendar event invitation on the server. /// The calendar item status should be updated locally before queuing this request. /// public record DeclineEventRequest(CalendarItem Item, string ResponseMessage = null) : CalendarRequestBase(Item) { private readonly CalendarItemStatus _previousStatus = Item.Status; public override CalendarSynchronizerOperation Operation => CalendarSynchronizerOperation.DeclineEvent; /// /// After successful decline, we need to resync to get updated status. /// public override int ResynchronizationDelay => 2000; public override void ApplyUIChanges() { // Update the item status locally Item.Status = CalendarItemStatus.Cancelled; // Notify UI that the event status was updated WeakReferenceMessenger.Default.Send(new CalendarItemUpdated(Item, CalendarItemUpdateSource.ClientUpdated)); } public override void RevertUIChanges() { // If decline fails, revert to the previous status Item.Status = _previousStatus; WeakReferenceMessenger.Default.Send(new CalendarItemUpdated(Item, CalendarItemUpdateSource.ClientReverted)); } }