<?php
/**
 * A basic HTML wrapper for stylish rendering of a developement info view.
 * Used to output error messages, and test results.
 *
 * @package framework
 * @subpackage dev
 *
 * @todo Perhaps DebugView should be an interface / ABC, implemented by HTMLDebugView and CliDebugView?
 */

class CliDebugView extends DebugView {

	/**
	 * Render HTML header for development views
	 */
	public function writeHeader($httpRequest = null) {
	}

	/**
	 * Render HTML footer for development views
	 */
	public function writeFooter() {
	}

	/**
	 * Write information about the error to the screen
	 */
	public function writeError($httpRequest, $errno, $errstr, $errfile, $errline, $errcontext) {
		$errorType = self::$error_types[$errno];
		echo SS_Cli::text("ERROR [" . $errorType['title'] . "]: $errstr\nIN $httpRequest\n", "red", null, true);
		echo SS_Cli::text("Line $errline in $errfile\n\n", "red");
	}

	/**
	 * Write a fragment of the a source file
	 * @param $lines An array of file lines; the keys should be the original line numbers
	 */
	public function writeSourceFragment($lines, $errline) {
		echo "Source\n======\n";
		foreach($lines as $offset => $line) {
			echo ($offset == $errline) ? "* " : "  ";
			echo str_pad("$offset:",5);
			echo wordwrap($line, self::config()->columns, "\n       ");
		}
		echo "\n";
	}

	/**
	 * Write a backtrace
	 */
	public function writeTrace($trace = null) {
		echo "Trace\n=====\n";
		echo SS_Backtrace::get_rendered_backtrace($trace ? $trace : debug_backtrace(), true);
	}

	/**
	 * Render the information header for the view
	 *
	 * @param string $title
	 * @param string $title
	 */
	public function writeInfo($title, $subtitle, $description=false) {
		echo wordwrap(strtoupper($title),self::config()->columns) . "\n";
		echo wordwrap($subtitle,self::config()->columns) . "\n";
		echo str_repeat('-',min(self::config()->columns,max(strlen($title),strlen($subtitle)))) . "\n";
		echo wordwrap($description,self::config()->columns) . "\n\n";
	}

	public function writeVariable($val, $caller) {
		echo PHP_EOL;
		echo SS_Cli::text(str_repeat('=', self::config()->columns), 'green');
		echo PHP_EOL;
		echo SS_Cli::text($this->formatCaller($caller), 'blue', null, true);
		echo PHP_EOL.PHP_EOL;
		if (is_string($val)) {
			print_r(wordwrap($val, self::config()->columns));
		} else {
			print_r($val);
		}
		echo PHP_EOL;
		echo SS_Cli::text(str_repeat('=', self::config()->columns), 'green');
		echo PHP_EOL;
	}
}