'use strict';

const config = require('config');
const styles = require('irc-colors');

function schatBold(text) {
	return `**${text}**`;
}

function schatItalic(text) {
	return `*${text}*`;
}

function schatColor(text, color) {
	return `{${color}}(${text})`;
}

function schatCode(text) {
	return `\`${text}\``;
}

function curate(fn) {
	return (text) => {
		if (text) {
			return fn(text);
		}

		return '';
	};
}

function bypass(text) {
	return text;
}

function shieldMethods(methods) {
	return Object.fromEntries(Object.entries(methods).map(([key, method]) => [key, curate(method)]));
}

module.exports = (() => {
	if (config.platform === 'irc') {
		return shieldMethods({
			...styles,
			code: bypass,
		});
	}

	if (config.platform === 'schat') {
		const methods = {
			bold: schatBold,
			italic: schatItalic,
			code: schatCode,
			...Object.fromEntries(Object.entries(config.schatColors).map(([color, value]) => [color, (text) => schatColor(text, value)])),
		};

		const handler = {
			get(target, prop) {
				return target[prop] || bypass;
			},
		};

		const shieldedMethods = shieldMethods(methods);

		return new Proxy(shieldedMethods, handler);
	}

	return null;
})();
