import { describe, it, expect } from 'vitest';
import { IsometricTileMap, type TileMapData } from '../IsometricTileMap';

function makeData(): TileMapData {
    return {
        width: 4,
        height: 4,
        tiles: new Array(16).fill(0),
        blocked: [2],
        tall: { 3: { height: 24, ground: 0 } }
    };
}

describe('IsometricTileMap.setTile', () => {
    it('обновляет данные и проходимость ячейки', () => {
        const map = new IsometricTileMap(makeData(), new Map());
        expect(map.isWalkable(1, 1)).toBe(true);

        map.setTile(1, 1, 3); // высокий объект
        expect(map.data.tiles[1 * 4 + 1]).toBe(3);
        expect(map.isWalkable(1, 1)).toBe(true); // 3 не в blocked

        map.setTile(1, 1, 2); // блокирующий id
        expect(map.data.tiles[1 * 4 + 1]).toBe(2);
        expect(map.isWalkable(1, 1)).toBe(false);
    });

    it('игнорирует координаты за границей карты', () => {
        const map = new IsometricTileMap(makeData(), new Map());
        expect(() => map.setTile(-1, 0, 2)).not.toThrow();
        expect(() => map.setTile(4, 0, 2)).not.toThrow();
        expect(() => map.setTile(0, 4, 2)).not.toThrow();
        // данные не изменились
        expect(map.data.tiles.every((t) => t === 0)).toBe(true);
    });
});