// Copyright 2013 The Flutter Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'common/output_utils.dart';
import 'common/package_looping_command.dart';
import 'common/repository_package.dart';

/// A command to run Dart's "fix" command on packages.
class FixCommand extends PackageLoopingCommand {
  /// Creates a fix command instance.
  FixCommand(super.packagesDir, {super.processRunner, super.platform, super.gitDir});

  @override
  final String name = 'fix';

  @override
  final String description =
      'Fixes packages using dart fix.\n\n'
      'This command requires "dart" and "flutter" to be in your path, and '
      'assumes that dependencies have already been fetched (e.g., by running '
      'the analyze command first).';

  @override
  final bool hasLongOutput = false;

  @override
  PackageLoopingType get packageLoopingType => PackageLoopingType.includeAllSubpackages;

  @override
  Future<PackageResult> runForPackage(RepositoryPackage package) async {
    final int exitCode = await processRunner.runAndStream('dart', <String>[
      'fix',
      '--apply',
    ], workingDir: package.directory);
    if (exitCode != 0) {
      printError('Unable to automatically fix package.');
      return PackageResult.fail();
    }
    return PackageResult.success();
  }
}
