using System; using System.Collections.Generic; using PepperDash.Essentials.Core; namespace PepperDash.Essentials.Devices.Common.Recording { /// /// 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 } }