'use strict';

const hasInterpolation = require('../utils/hasInterpolation');

/**
 * Check whether a selector is standard
 *
 * @param {string} selector
 * @returns {boolean}
 */
module.exports = function (selector) {
	// SCSS or Less interpolation
	if (hasInterpolation(selector)) {
		return false;
	}

	// SCSS placeholder selectors
	if (selector.startsWith('%')) {
		return false;
	}

	// SCSS nested properties
	if (selector.endsWith(':')) {
		return false;
	}

	// Less :extend()
	if (/:extend(?:\(.*?\))?/.test(selector)) {
		return false;
	}

	// Less mixin with resolved nested selectors (e.g. .foo().bar or .foo(@a, @b)[bar])
	if (/\.[\w-]+\(.*\).+/.test(selector)) {
		return false;
	}

	// Less non-outputting mixin definition (e.g. .mixin() {})
	if (selector.endsWith(')') && !selector.includes(':')) {
		return false;
	}

	// Less Parametric mixins (e.g. .mixin(@variable: x) {})
	if (/\(@.*\)$/.test(selector)) {
		return false;
	}

	// ERB template tags
	if (selector.includes('<%') || selector.includes('%>')) {
		return false;
	}

	return true;
};
