diff --git a/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs b/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs new file mode 100644 index 00000000..b2096b30 --- /dev/null +++ b/src/PepperDash.Essentials.Devices.Common/Recording/ICourtSession.cs @@ -0,0 +1,172 @@ +using System; +using System.Collections.Generic; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Plugin +{ + /// + /// Defines the contract for court session management including + /// session lifecycle, recording control, case management, and status feedback. + /// + public interface ICourtSession + { + #region Session Lifecycle + + /// + /// Create a new court session with the given title. + /// + bool CreateCourtSession(string title); + + /// + /// Get the active court session payload and cache it locally. + /// + bool GetActiveCourtSession(); + + /// + /// Check whether an active court session exists. + /// + bool HasActiveCourtSession(); + + /// + /// Edit the active court session title. + /// + bool EditCourtSessionTitle(string title); + + /// + /// Close the active court session. + /// + bool CloseCourtSession(); + + /// + /// Force close the active court session. + /// + bool ForceCloseCourtSession(); + + #endregion + + #region Recording Control + + /// + /// Start recording the active court session. + /// + bool StartRecording(); + + /// + /// Stop the current recording. + /// + bool StopRecording(); + + /// + /// Seal the current recording (protect/read-only). + /// + bool Seal(); + + /// + /// Unseal the current recording. + /// + bool Unseal(); + + /// + /// Get the current recording status from the API. + /// + bool GetRecordingStatus(); + + /// + /// Get the current seal status from the API. + /// + bool GetSealStatus(); + + #endregion + + + + + #region Status + + /// + /// Get current session information (case ID and name). + /// + Dictionary GetCurrentSessionInfo(); + + + /// + /// Get the activation status from the API. + /// + bool GetActivationStatus(); + + #endregion + + #region Feedbacks + + /// + /// True when currently recording. + /// + BoolFeedback IsRecording { get; } + + /// + /// True when the recording is sealed. + /// + BoolFeedback IsSealed { get; } + + /// + /// Recording duration in milliseconds. + /// + StringFeedback RecordingDurationMs { get; } + + /// + /// Recording duration formatted as HH:MM:SS. + /// + StringFeedback RecordingDurationFormatted { get; } + + /// + /// Current case ID for the active session. + /// + StringFeedback CurrentCaseId { get; } + + /// + /// Current case name for the active session. + /// + StringFeedback CurrentCaseName { get; } + + /// + /// Current recording session state (Idle, Recording, Sealed, Disconnected, Error). + /// + StringFeedback CurrentState { get; } + + /// + /// Error message if session is in error state. + /// + StringFeedback ErrorMessage { get; } + + /// + /// API heartbeat counter for diagnostics. + /// + IntFeedback HeartbeatCounter { get; } + + /// + /// True when CourtCapture reports an active court session. + /// + BoolFeedback HasActiveCourtSessionFeedback { get; } + + /// + /// Last command result envelope as JSON string for UI binding. + /// + StringFeedback LastCommandResult { get; } + + #endregion + + #region Events + + /// + /// Raised when case notes are updated. + /// + event EventHandler CaseNotesUpdated; + + /// + /// Raised when quick links are updated. + /// + event EventHandler QuickLinksUpdated; + + #endregion + } +}