'use strict';

/** @typedef {import('postcss').Node} Node */

/**
 * @param {Node} node
 */
function getNodeLine(node) {
	return node.source && node.source.start && node.source.start.line;
}

/**
 * @param {Node | undefined} node
 * @returns {Node | undefined}
 */
module.exports = function getPreviousNonSharedLineCommentNode(node) {
	if (node === undefined) {
		return undefined;
	}

	const previousNode = node.prev();

	if (!previousNode || previousNode.type !== 'comment') {
		return previousNode;
	}

	if (getNodeLine(node) === getNodeLine(previousNode)) {
		return getPreviousNonSharedLineCommentNode(previousNode);
	}

	const previousNode2 = previousNode.prev();

	if (previousNode2 && getNodeLine(previousNode) === getNodeLine(previousNode2)) {
		return getPreviousNonSharedLineCommentNode(previousNode);
	}

	return previousNode;
};
