interface FoundMention {
	value: string;
	index: number;
}

function getMentionAt(text: string, cursorPos: number): FoundMention | undefined {
	const re = /(^|\s)@([a-z0-9.-]*)/gi;
	let match;
	while ((match = re.exec(text))) {
		const spaceOffset = match[1]!.length;
		const index = match.index + spaceOffset;
		if (cursorPos >= index && cursorPos <= index + match[0].length - spaceOffset) {
			return { value: match[2]!, index };
		}
	}
	return undefined;
}

export function insertMentionAt(text: string, cursorPos: number, mention: string) {
	const target = getMentionAt(text, cursorPos);
	if (target) {
		return `${text.slice(0, target.index)}@${mention} ${text.slice(
			target.index + target.value.length + 1, // add 1 to include the "@"
		)}`;
	}
	return text;
}
