#!/usr/bin/env python3
# SPDX-License-Identifier: GPL-2.0
#
# Utilities for printing and coloring output.
#
# Copyright (C) 2022, Google LLC.
# Author: Daniel Latypov <dlatypov@google.com>

import datetime
import sys
import typing

_RESET = '\033[0;0m'

class Printer:
	"""Wraps a file object, providing utilities for coloring output, etc."""

	def __init__(self, output: typing.IO[str]):
		self._output = output
		self._use_color = output.isatty()

	def print(self, message: str) -> None:
		print(message, file=self._output)

	def print_with_timestamp(self, message: str) -> None:
		ts = datetime.datetime.now().strftime('%H:%M:%S')
		self.print(f'[{ts}] {message}')

	def _color(self, code: str, text: str) -> str:
		if not self._use_color:
			return text
		return code + text + _RESET

	def red(self, text: str) -> str:
		return self._color('\033[1;31m', text)

	def yellow(self, text: str) -> str:
		return self._color('\033[1;33m', text)

	def green(self, text: str) -> str:
		return self._color('\033[1;32m', text)

	def color_len(self) -> int:
		"""Returns the length of the color escape codes."""
		return len(self.red(''))

# Provides a default instance that prints to stdout
stdout = Printer(sys.stdout)
