using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using PepperDash.Core;
using PepperDash.Core.Logging;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Room.Config;
namespace PepperDash.Essentials.AppServer.Messengers;
///
/// Represents a RoomEventScheduleMessenger
///
public class IRoomEventScheduleMessenger : MessengerBase
{
private readonly IRoomEventSchedule _room;
///
/// Initializes a new instance of the class.
///
///
///
///
public IRoomEventScheduleMessenger(string key, string messagePath, IRoomEventSchedule room)
: base(key, messagePath, room as IKeyName)
{
_room = room;
}
#region Overrides of MessengerBase
///
protected override void RegisterActions()
{
AddAction("/saveScheduledEvents", (id, content) => SaveScheduledEvents(content.ToObject>()));
AddAction("/fullStatus", (id, content) =>
{
var events = _room.GetScheduledEvents();
SendFullStatus(events, id);
});
AddAction("/roomEventStatus", (id, content) =>
{
var events = _room.GetScheduledEvents();
SendFullStatus(events, id);
});
AddAction("/scheduledEventsStatus", (id, content) =>
{
var events = _room.GetScheduledEvents();
SendFullStatus(events, id);
});
_room.ScheduledEventsChanged += (sender, args) => SendFullStatus(args.ScheduledEvents);
}
#endregion
private void SaveScheduledEvents(List events)
{
foreach (var evt in events)
{
SaveScheduledEvent(evt);
}
}
private void SaveScheduledEvent(ScheduledEventConfig eventConfig)
{
try
{
_room.AddOrUpdateScheduledEvent(eventConfig);
}
catch (Exception ex)
{
this.LogException(ex, "Exception saving event");
}
}
private void SendFullStatus(List events, string id = null)
{
var message = new RoomEventScheduleStateMessage
{
ScheduleEvents = events,
};
PostStatusMessage(message, id);
}
}
///
/// Represents a RoomEventScheduleStateMessage
///
public class RoomEventScheduleStateMessage : DeviceStateMessageBase
{
///
/// Gets or sets the ScheduleEvents
///
[JsonProperty("scheduleEvents")]
public List ScheduleEvents { get; set; }
}