using DeepDrftModels.Enums; namespace DeepDrftPublic.Client.Services; /// /// The emit seam for the (Phase 16 §2.1). The tracker owns the session /// lifecycle, the engagement floor, and the bucket classification but knows nothing about transport — /// it hands a finished classification to a sink. The production sink fires a sendBeacon POST to /// api/event/play; tests substitute a fake sink to assert floor and bucket behaviour with no /// JS interop. This keeps the tracker's logic testable behind one seam, as the spec calls for. /// public interface IPlayEventSink { /// Emit one recorded play. Called at most once per session, only when the floor is crossed. void EmitPlay(string trackEntryKey, PlayBucket bucket); }