// Copyright (c) 2021, 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 '../command.dart';
import '../exceptions.dart';
import '../log.dart' as log;
import '../source/hosted.dart';

/// Handles the `token remove` pub command.
class TokenRemoveCommand extends PubCommand {
  @override
  String get name => 'remove';
  @override
  String get description => '''
Remove secret token for package repository at <hosted-url>.''';
  @override
  String get argumentsDescription => '<hosted-url> | --all';
  @override
  String get docUrl => 'https://dart.dev/tools/pub/cmd/pub-token';

  bool get isAll => argResults['all'];

  TokenRemoveCommand() {
    argParser.addFlag(
      'all',
      negatable: false,
      help: 'Remove all secret tokens.',
    );
  }

  @override
  Future<void> runProtected() async {
    if (isAll) {
      final count = tokenStore.credentials.length;
      tokenStore.deleteTokensFile();
      log.message('Removed $count secret tokens.');
      return;
    }

    if (argResults.rest.isEmpty) {
      usageException(
        'The [hosted-url] for a package repository must be specified.',
      );
    } else if (argResults.rest.length > 1) {
      usageException('Takes only a single argument.');
    }

    try {
      final hostedUrl = validateAndNormalizeHostedUrl(argResults.rest.first);
      final found = tokenStore.removeCredential(hostedUrl);

      if (found) {
        log.message('Removed secret token for package repository: $hostedUrl');
      } else {
        throw DataException(
          'No secret token for package repository "$hostedUrl" was found.',
        );
      }
    } on FormatException catch (e) {
      usageException('Invalid [hosted-url]: "${argResults.rest.first}"\n'
          '${e.message}');
    }
  }
}
