import { PathFinding } from '../src/engine/PathFinding';

describe('calculating start and end points', function () {
	let pathFinding: PathFinding = new PathFinding(null);

	beforeEach(() => {
		pathFinding = new PathFinding(null);
	});

	test('return correct object for valid walkable input', () => {
		const matrix = [
			[0, 0, 0, 0, 1, 1],
			[0, 0, 0, 0, 1, 1],
			[0, 0, 0, 0, 0, 0],
			[0, 0, 0, 0, 0, 0],
			[1, 1, 0, 0, 0, 0],
			[1, 1, 0, 0, 0, 0]
		];
		const path = [
			[0, 5],
			[1, 4],
			[2, 3],
			[3, 2],
			[4, 1],
			[5, 0]
		];

		const result = pathFinding.calculateLinkStartEndCoords(matrix, path);

		expect(result.start).toEqual({
			x: 2,
			y: 3
		});
		expect(result.end).toEqual({
			x: 3,
			y: 2
		});
		expect(result.pathToStart).toEqual([
			[0, 5],
			[1, 4]
		]);
		expect(result.pathToEnd).toEqual([
			[3, 2],
			[4, 1],
			[5, 0]
		]);
	});

	test('undefined is returned when no walkable path exists', () => {
		const matrix = [
			[0, 0, 1, 1],
			[0, 0, 1, 1],
			[1, 1, 0, 0],
			[1, 1, 0, 0]
		];
		const path = [
			[0, 3],
			[1, 2],
			[2, 1],
			[3, 0]
		];

		const result = pathFinding.calculateLinkStartEndCoords(matrix, path);

		expect(result).toBeUndefined();
	});
});
