// Copyright 2020 The Flutter Authors. 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 'dart:io';

import 'package:process/process.dart';

import 'android_device.dart';
import 'health.dart';
import 'ios_device.dart';

/// Discovers available devices and chooses one to work with.
abstract class DeviceDiscovery {
  factory DeviceDiscovery(String? deviceOs, File? output) {
    switch (deviceOs) {
      case 'ios':
        return IosDeviceDiscovery(output);
      case 'android':
        return AndroidDeviceDiscovery(output);
      default:
        throw StateError('Unsupported device operating system: $deviceOs');
    }
  }

  /// Lists all available devices' IDs.
  Future<List<Device>> discoverDevices({Duration retryDuration = const Duration(seconds: 10)});

  /// Checks the health of the available devices.
  Future<Map<String, List<HealthCheckResult>>> checkDevices({ProcessManager processManager});

  /// Checks and returns the device properties, like manufacturer, base_buildid, etc.
  ///
  /// Currently it supports only android devices, but can extend to iOS devices.
  Future<Map<String, String>> deviceProperties({ProcessManager processManager});

  /// Recovers the device.
  Future<void> recoverDevices();

  /// Prepares the device.
  Future<void> prepareDevices();
}

/// A proxy for one specific phone device.
abstract class Device {
  /// A unique device identifier.
  String? get deviceId;

  /// Recovers the device back to a healthy state.
  Future<void> recover();

  /// Prepares the device before running tasks.
  Future<void> prepare();
}
