using Recordingtest.Player.Model; namespace Recordingtest.Player; /// Element bounds in screen pixels. public readonly record struct ElementBounds(double X, double Y, double Width, double Height); /// Resolved element handle (opaque to the engine). public readonly record struct ResolvedElement(ElementBounds Bounds, object? Native); public readonly record struct ScreenPoint(int X, int Y); public interface IPlayerHost { /// Resolve a UIA path with retry/timeout. Returns null if not found. ResolvedElement? ResolveElement(string uiaPath, TimeSpan timeout); /// Wait for a wait_for hint to be satisfied. Returns false on timeout. bool WaitFor(string waitForHint, TimeSpan timeout); void Click(ScreenPoint point); void Type(string text); void Drag(ScreenPoint from, ScreenPoint to); void Hotkey(string keys); void CaptureCheckpoint(int afterStep, string saveAs); void CaptureFailureArtifacts(int stepIndex, string reason); }