// 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.

/// This is not a part of the main Device Doctor because it depends on Xcode
/// being installed and set up in the environment, while the main iOS Device
/// Doctor workflow runs before Xcode is provisioned.

import 'dart:io';

import 'package:args/command_runner.dart';
import 'package:device_doctor/device_doctor.dart';
import 'package:logging/logging.dart';

const String helpFlag = 'help';

Future<void> main(List<String> args) async {
  // Write logs to stdout
  Logger.root.onRecord.listen((LogRecord record) {
    stdout.writeln(record.toString());
  });

  final CommandRunner<bool> runner = CommandRunner<bool>(
    'ios-debug-symbol-doctor',
    'Tool for diagnosing and recovering from iOS debug symbols not synched with the host by Xcode',
  )
    ..addCommand(DiagnoseCommand())
    ..addCommand(RecoverCommand());

  final bool? success = await runner.run(args);
  exit(success == true ? 0 : 1);
}
