import "jasmine";
import { Room } from "../../../src/Connexion/Room";
import { flattenGroupLayersMap } from "../../../src/Phaser/Map/LayersFlattener";
import type { ITiledMapLayer } from "../../../src/Phaser/Map/ITiledMap";

describe("Layers flattener", () => {
    it("should iterate maps with no group", () => {
        let flatLayers: ITiledMapLayer[] = [];
        flatLayers = flattenGroupLayersMap({
            compressionlevel: -1,
            height: 2,
            infinite: false,
            layers: [
                {
                    data: [0, 0, 0, 0],
                    height: 2,
                    id: 1,
                    name: "Tile Layer 1",
                    opacity: 1,
                    type: "tilelayer",
                    visible: true,
                    width: 2,
                    x: 0,
                    y: 0,
                },
                {
                    data: [0, 0, 0, 0],
                    height: 2,
                    id: 1,
                    name: "Tile Layer 2",
                    opacity: 1,
                    type: "tilelayer",
                    visible: true,
                    width: 2,
                    x: 0,
                    y: 0,
                },
            ],
            nextlayerid: 2,
            nextobjectid: 1,
            orientation: "orthogonal",
            renderorder: "right-down",
            tiledversion: "2021.03.23",
            tileheight: 32,
            tilesets: [],
            tilewidth: 32,
            type: "map",
            version: 1.5,
            width: 2,
        });

        const layers = [];
        for (const layer of flatLayers) {
            layers.push(layer.name);
        }
        expect(layers).toEqual(["Tile Layer 1", "Tile Layer 2"]);
    });

    it("should iterate maps with recursive groups", () => {
        let flatLayers: ITiledMapLayer[] = [];
        flatLayers = flattenGroupLayersMap({
            compressionlevel: -1,
            height: 2,
            infinite: false,
            layers: [
                {
                    id: 6,
                    layers: [
                        {
                            id: 5,
                            layers: [
                                {
                                    data: [0, 0, 0, 0],
                                    height: 2,
                                    id: 10,
                                    name: "Tile3",
                                    opacity: 1,
                                    type: "tilelayer",
                                    visible: true,
                                    width: 2,
                                    x: 0,
                                    y: 0,
                                },
                                {
                                    data: [0, 0, 0, 0],
                                    height: 2,
                                    id: 9,
                                    name: "Tile2",
                                    opacity: 1,
                                    type: "tilelayer",
                                    visible: true,
                                    width: 2,
                                    x: 0,
                                    y: 0,
                                },
                            ],
                            name: "Group 3",
                            opacity: 1,
                            type: "group",
                            visible: true,
                            x: 0,
                            y: 0,
                        },
                        {
                            id: 7,
                            layers: [
                                {
                                    data: [0, 0, 0, 0],
                                    height: 2,
                                    id: 8,
                                    name: "Tile1",
                                    opacity: 1,
                                    type: "tilelayer",
                                    visible: true,
                                    width: 2,
                                    x: 0,
                                    y: 0,
                                },
                            ],
                            name: "Group 2",
                            opacity: 1,
                            type: "group",
                            visible: true,
                            x: 0,
                            y: 0,
                        },
                    ],
                    name: "Group 1",
                    opacity: 1,
                    type: "group",
                    visible: true,
                    x: 0,
                    y: 0,
                },
            ],
            nextlayerid: 11,
            nextobjectid: 1,
            orientation: "orthogonal",
            renderorder: "right-down",
            tiledversion: "2021.03.23",
            tileheight: 32,
            tilesets: [],
            tilewidth: 32,
            type: "map",
            version: 1.5,
            width: 2,
        });

        const layers = [];
        for (const layer of flatLayers) {
            layers.push(layer.name);
        }
        expect(layers).toEqual(["Group 1/Group 3/Tile3", "Group 1/Group 3/Tile2", "Group 1/Group 2/Tile1"]);
    });
});