"use strict";

// Create plain text entries corresponding to areas of the text that match no
// existing entries. Returns an empty array if all parts of the text have been
// parsed into recognizable entries already.
function fill(existingEntries, text) {
	let position = 0;

	// Fill inner parts of the text. For example, if text is `foobarbaz` and both
	// `foo` and `baz` have matched into an entry, this will return a dummy entry
	// corresponding to `bar`.
	const result = existingEntries.reduce((acc, textSegment) => {
		if (textSegment.start > position) {
			acc.push({
				start: position,
				end: textSegment.start,
			});
		}

		position = textSegment.end;
		return acc;
	}, []);

	// Complete the unmatched end of the text with a dummy entry
	if (position < text.length) {
		result.push({
			start: position,
			end: text.length,
		});
	}

	return result;
}

module.exports = fill;