// 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 '../log.dart' as log;

/// Handles the `token list` pub command.
class TokenListCommand extends PubCommand {
  @override
  String get name => 'list';
  @override
  String get description => 'List servers for which a token exists.';
  @override
  String get docUrl => 'https://dart.dev/tools/pub/cmd/pub-token';

  @override
  Future<void> runProtected() async {
    if (cache.tokenStore.credentials.isNotEmpty) {
      log.message(
        'You have secret tokens for ${cache.tokenStore.credentials.length} package '
        'repositories:',
      );
      for (final token in cache.tokenStore.credentials) {
        log.message(token.url);
      }
    } else {
      log.message(
        'You do not have any secret tokens for package repositories.\n'
        'However you can add new tokens using the command below:\n'
        '\n    pub token add [hosted-url]',
      );
    }
  }
}
