export class ValidationError extends Error {
	description = '';

	itemIndex: number | undefined = undefined;

	context: { itemIndex: number } | undefined = undefined;

	lineNumber: number | undefined = undefined;

	constructor({
		message,
		description,
		itemIndex,
		lineNumber,
	}: {
		message: string;
		description: string;
		itemIndex?: number;
		lineNumber?: number;
	}) {
		super();

		this.lineNumber = lineNumber;
		this.itemIndex = itemIndex;

		if (this.lineNumber !== undefined && this.itemIndex !== undefined) {
			this.message = `${message} [line ${lineNumber}, for item ${itemIndex}]`;
		} else if (this.lineNumber !== undefined) {
			this.message = `${message} [line ${lineNumber}]`;
		} else if (this.itemIndex !== undefined) {
			this.message = `${message} [item ${itemIndex}]`;
		} else {
			this.message = message;
		}

		this.description = description;

		if (this.itemIndex !== undefined) {
			this.context = { itemIndex: this.itemIndex };
		}
	}
}