// Copyright (c) 2017, 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 'dart:io';

final _cyan = _getSpecial('\u001b[36m');
final _green = _getSpecial('\u001b[32m');
final _magenta = _getSpecial('\u001b[35m');
final _red = _getSpecial('\u001b[31m');
final _yellow = _getSpecial('\u001b[33m');
final _blue = _getSpecial('\u001b[34m');
final _gray = _getSpecial('\u001b[1;30m');
final _none = _getSpecial('\u001b[0m');
final _noColor = _getSpecial('\u001b[39m');
final _bold = _getSpecial('\u001b[1m');

void done(Object message) {
  print("  ${green('(DONE)')} $message");
}

void note(Object message) {
  print("  ${cyan('(NOTE)')} $message");
}

void todo(Object message) {
  print("  ${red('(TODO)')} $message");
}

String bold(text) => "$_bold$text$_none";

String cyan(text) => "$_cyan$text$_noColor";

String green(text) => "$_green$text$_noColor";

String red(text) => "$_red$text$_noColor";

/// Gets a "special" string (ANSI escape or Unicode).
///
/// On Windows or when not printing to a terminal, returns something else since
/// those aren't supported.
String _getSpecial(String special, [String onWindows = '']) {
  if (Platform.operatingSystem == 'windows' ||
      stdioType(stdout) != StdioType.TERMINAL) {
    return onWindows;
  }

  return special;
}
