// 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 'package:process/process.dart';

import 'health.dart';
import 'utils.dart';

/// The health check for Mac swarming user auto login.
///
/// The `swarming` user auto login is required for Flutter desktop tests which need to run
/// GUI application on Mac.
Future<HealthCheckResult> userAutoLoginCheck({ProcessManager? processManager}) async {
  HealthCheckResult healthCheckResult;
  try {
    final String user = await eval(
        'defaults', <String>['read', '/Library/Preferences/com.apple.loginwindow', 'autoLoginUser'],
        processManager: processManager);
    // User `swarming` is expected setup for Mac bot auto login.
    if (user == 'swarming') {
      healthCheckResult = HealthCheckResult.success(kUserAutoLoginCheckKey);
    } else {
      healthCheckResult =
          HealthCheckResult.failure(kUserAutoLoginCheckKey, 'swarming user is not setup for auto login');
    }
  } on BuildFailedError catch (error) {
    healthCheckResult = HealthCheckResult.failure(kUserAutoLoginCheckKey, error.toString());
  }
  return healthCheckResult;
}
