import { Position, Range } from 'vscode';
import { SyntaxNode } from 'web-tree-sitter';

import { Point, TextRange } from '../../code-search/scope-graph/model/TextRange';

export class TextInRange extends Range {
	text: string;
	startIndex: number;
	endIndex: number;

	private constructor(displayName: string = '', start: Position, end: Position, startIndex: number, endIndex: number) {
		super(start, end);
		this.text = displayName;
		this.startIndex = startIndex;
		this.endIndex = endIndex;
	}

	static fromNode(id: SyntaxNode) {
		const startPosition = new Position(id.startPosition.row, id.startPosition.column);
		const endPosition = new Position(id.endPosition.row, id.endPosition.column);

		const startIndex = id.startIndex;
		const endIndex = id.endIndex;

		return new TextInRange(id.text, startPosition, endPosition, startIndex, endIndex);
	}

	toTextRange(): TextRange {
		const start = new Point(this.start.line, this.start.character, this.startIndex);
		const end = new Point(this.end.line, this.end.character, this.endIndex);
		return new TextRange(start, end, this.text);
	}
}
