'use strict';
var fs = require('fs');
var path = require('path');
var chalk = require('chalk');
var globals = require('./globals');

module.exports = function throwsHelper(error) {
	if (!error || !error._avaThrowsHelperData) {
		return;
	}

	var data = error._avaThrowsHelperData;
	var codeFrame = require('babel-code-frame');
	var frame = '';

	try {
		var rawLines = fs.readFileSync(data.filename, 'utf8');
		frame = codeFrame(rawLines, data.line, data.column, {highlightCode: true});
	} catch (e) {
		console.warn(e);
	}

	console.error(
		[
			'Improper usage of t.throws detected at ' + chalk.bold.yellow('%s (%d:%d)') + ':',
			frame,
			'The first argument to t.throws should be wrapped in a function:',
			chalk.cyan('  t.throws(function() {\n    %s\n  })'),
			'Visit the following URL for more details:',
			'  ' + chalk.blue.underline('https://github.com/avajs/ava#throwsfunctionpromise-error-message')
		].join('\n\n'),
		path.relative(globals.options.baseDir, data.filename),
		data.line,
		data.column,
		data.source
	);
};