function slugify(text: string) {
	return text
		.toString()
		.toLowerCase()
		.replace(/\s+/g, '-') // Replace spaces with -
		.replace(/[^\w\-]+/g, '') // Remove all non-word chars
		.replace(/\-\-+/g, '-') // Replace multiple - with single -
		.replace(/^-+/, '') // Trim - from start of text
		.replace(/-+$/, ''); // Trim - from end of text
}

function idGenerator(): string {
	const id =
		Math.random().toString(32).substring(2, 6) +
		Math.random().toString(36).substring(2, 6);
	return slugify(id);
}

/**
 * useFormIds uses the provided label to generate a unique id for the
 * form element. If no label is provided the id is generated using a
 * random string.
 */
export function useFormIds(label: string): string {
	const slug = label ? slugify(label) : idGenerator();
	return `${slug}-${idGenerator()}`;
}

export function useId(): string {
	return idGenerator();
}