using RioJoy.Core.Mapping;
namespace RioJoy.Core.Tests.Mapping;
///
/// Records every routed output as an ordered, human-readable log so tests can
/// assert both what happened and in what order.
///
internal sealed class RecordingSink : IInputSink, IJoystickSink, ILampSink, IRioCommandSink
{
public List Log { get; } = new();
public void KeyDown(byte virtualKey, bool extended) => Log.Add($"KeyDown(0x{virtualKey:X2},ext={extended})");
public void KeyUp(byte virtualKey, bool extended) => Log.Add($"KeyUp(0x{virtualKey:X2},ext={extended})");
public void MouseMove(int dx, int dy) => Log.Add($"MouseMove({dx},{dy})");
public void MouseButton(MouseButton button, bool down) => Log.Add($"MouseButton({button},{down})");
public void SetButton(int button, bool pressed) => Log.Add($"Joy({button},{pressed})");
public void SetHat(RioHat position) => Log.Add($"Hat({position})");
public void SetLamp(int address, byte lampState) => Log.Add($"Lamp(0x{address:X2},0x{lampState:X2})");
public void Execute(RioCommandCode command) => Log.Add($"Cmd({command})");
}