import { hasOwn } from "element-ui/src/utils/util";

const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
/**
 *  String format template
 *  - Inspired:
 *    https://github.com/Matt-Esch/string-template/index.js
 */
export default function(Vue) {
	/**
	 * template
	 *
	 * @param {String} string
	 * @param {Array} ...args
	 * @return {String}
	 */

	function template(string, ...args) {
		if (args.length === 1 && typeof args[0] === "object") {
			args = args[0];
		}

		if (!args || !args.hasOwnProperty) {
			args = {};
		}

		return string.replace(RE_NARGS, (match, prefix, i, index) => {
			let result;

			if (
				string[index - 1] === "{" &&
				string[index + match.length] === "}"
			) {
				return i;
			} else {
				result = hasOwn(args, i) ? args[i] : null;
				if (result === null || result === undefined) {
					return "";
				}

				return result;
			}
		});
	}

	return template;
}
