// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:async';

import 'package:async/async.dart';
import 'package:vm_service/vm_service.dart';
import 'package:test_core/src/runner/environment.dart'; // ignore: implementation_imports

/// The environment in which VM tests are loaded.
class VMEnvironment implements Environment {
  @override
  final supportsDebugging = true;
  @override
  final Uri observatoryUrl;

  /// The VM service isolate object used to control this isolate.
  final IsolateRef _isolate;
  final VmService _client;

  VMEnvironment(this.observatoryUrl, this._isolate, this._client);

  @override
  Uri? get remoteDebuggerUrl => null;

  @override
  Stream get onRestart => StreamController.broadcast().stream;

  @override
  CancelableOperation displayPause() {
    var completer =
        CancelableCompleter(onCancel: () => _client.resume(_isolate.id!));

    completer.complete(_client.pause(_isolate.id!).then((_) => _client
        .onDebugEvent
        .firstWhere((event) => event.kind == EventKind.kResume)));

    return completer.operation;
  }
}
