const chalk = require('chalk');

const describe = (jsHandle) => jsHandle.executionContext().evaluate(
	// serialize |obj| however you want
	(obj) => `OBJ: ${typeof obj}, ${obj}`,
	jsHandle,
);

const colors = {
	LOG: chalk.grey,
	ERR: chalk.red,
	WAR: chalk.yellow,
	INF: chalk.cyan,
};

const formatter = async (message) => {
	const args = await Promise.all(message.args().map((arg) => describe(arg)));
	// make ability to paint different console[types]
	const type = message.type().substr(0, 3).toUpperCase();
	const color = colors[type] || chalk.blue;
	let text = '';
	for (let i = 0; i < args.length; i += 1) {
		text += `[${i}] ${args[i]} `;
	}
	console.log(color(`CONSOLE.${type}: ${message.text()}\n${text} `));
};

module.exports = formatter;
