import 'package:watch_bridge_contract/watch_bridge_contract.dart';

abstract interface class WatchCommandIngress {
  Future<WatchCommandAck> dispatch(WatchCommandEnvelope command);
}

abstract interface class WatchProjectionPublisher {
  Future<void> publish(WatchSessionProjection projection, {bool urgent = true});
}

abstract interface class WatchAlertPublisher {
  Future<void> publishAlert(WatchAlertEnvelope alert);
}

abstract interface class WatchProjectionSource {
  Stream<WatchSessionProjection> get projections;

  Future<WatchSessionProjection> currentProjection();

  Future<WatchSessionProjection> emitCurrentProjection();
}

abstract interface class WatchCompanionUseCases
    implements WatchCommandIngress, WatchProjectionSource {}
