using System; using PepperDash.Essentials.Core.Abstractions; namespace PepperDash.Essentials.Core.Factory { /// /// Factory for creating Crestron environment dependencies /// Allows switching between real Crestron libraries and mock implementations /// public static class CrestronEnvironmentFactory { private static ICrestronEnvironmentProvider _provider; private static bool _isTestMode = false; static CrestronEnvironmentFactory() { // Default to runtime provider _provider = new CrestronRuntimeProvider(); } /// /// Enables test mode with mock implementations /// public static void EnableTestMode() { _isTestMode = true; _provider = new CrestronMockProvider(); } /// /// Disables test mode and returns to runtime implementations /// public static void DisableTestMode() { _isTestMode = false; _provider = new CrestronRuntimeProvider(); } /// /// Sets a custom provider for Crestron environment /// public static void SetProvider(ICrestronEnvironmentProvider provider) { _provider = provider ?? throw new ArgumentNullException(nameof(provider)); } /// /// Gets whether the factory is in test mode /// public static bool IsTestMode => _isTestMode; /// /// Gets the current control system instance /// public static ICrestronControlSystem GetControlSystem() { return _provider.GetControlSystem(); } /// /// Creates a relay port /// public static IRelayPort CreateRelayPort(uint portNumber) { return _provider.CreateRelayPort(portNumber); } /// /// Creates a digital input /// public static IDigitalInput CreateDigitalInput(uint portNumber) { return _provider.CreateDigitalInput(portNumber); } /// /// Creates a versiport /// public static IVersiPort CreateVersiPort(uint portNumber) { return _provider.CreateVersiPort(portNumber); } /// /// Gets console manager for debugging /// public static IConsoleManager GetConsoleManager() { return _provider.GetConsoleManager(); } /// /// Gets system information /// public static ISystemInfo GetSystemInfo() { return _provider.GetSystemInfo(); } } /// /// Provider interface for Crestron environment dependencies /// public interface ICrestronEnvironmentProvider { ICrestronControlSystem GetControlSystem(); IRelayPort CreateRelayPort(uint portNumber); IDigitalInput CreateDigitalInput(uint portNumber); IVersiPort CreateVersiPort(uint portNumber); IConsoleManager GetConsoleManager(); ISystemInfo GetSystemInfo(); } /// /// Console manager abstraction /// public interface IConsoleManager { void Print(string message); void PrintLine(string message); void RegisterCommand(string command, Action handler, string help); } /// /// System information abstraction /// public interface ISystemInfo { string ProgramName { get; } string SerialNumber { get; } string MacAddress { get; } string IpAddress { get; } string FirmwareVersion { get; } DateTime SystemUpTime { get; } } }