// 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");
}

void warn(Object message) {
  print("${yellow('(WARN)')} $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";

String yellow(text) => "$_yellow$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;
}
