'use strict';
const StackUtils = require('stack-utils');
const cleanStack = require('clean-stack');
const debug = require('debug')('ava');

// Ignore unimportant stack trace lines
let ignoreStackLines = [];

const avaInternals = /\/ava\/(?:lib\/)?[\w-]+\.js:\d+:\d+\)?$/;
const avaDependencies = /\/node_modules\/(?:bluebird|empower-core|(?:ava\/node_modules\/)?(?:babel-runtime|core-js))\//;

if (!debug.enabled) {
	ignoreStackLines = StackUtils.nodeInternals();
	ignoreStackLines.push(avaInternals);
	ignoreStackLines.push(avaDependencies);
}

const stackUtils = new StackUtils({internals: ignoreStackLines});

module.exports = stack => {
	if (!stack) {
		return '';
	}

	// Workaround for https://github.com/tapjs/stack-utils/issues/14
	// TODO: fix it in `stack-utils`
	stack = cleanStack(stack);

	const title = stack.split('\n')[0];
	const lines = stackUtils
		.clean(stack)
		.split('\n')
		.map(x => `    ${x}`)
		.join('\n');

	return `${title}\n${lines}`;
};