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; }
}
}