// Copyright 2013 The Flutter Authors. 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';

bool _supportsAnsi = stdout.supportsAnsiEscapes;
String _green = _supportsAnsi ? '\u001b[1;32m' : '';
String _red = _supportsAnsi ? '\u001b[31m' : '';
String _yellow = _supportsAnsi ? '\u001b[33m' : '';
String _gray = _supportsAnsi ? '\u001b[90m' : '';
String _reset = _supportsAnsi? '\u001B[0m' : '';

Future<void> step(String msg, Future<void> Function() fn) async {
  stdout.writeln('-> $_green$msg$_reset');
  try {
    await fn();
  } catch (_) {
    stderr.writeln('~~ ${_red}Failed$_reset');
    rethrow;
  } finally {
    stdout.writeln('<- ${_gray}Done$_reset');
  }
}

void _logWithColor(String color, String msg) {
  stdout.writeln('$color$msg$_reset');
}

void log(String msg) {
  _logWithColor(_gray, msg);
}

void logImportant(String msg) {
  stdout.writeln(msg);
}

void logWarning(String msg) {
  _logWithColor(_yellow, msg);
}

void logError(String msg) {
  _logWithColor(_red, msg);
}

final class Panic extends Error {}

Never panic(List<String> messages) {
  messages.forEach(logError);
  throw Panic();
}
