import { TSize } from "@/types/room";
import { defineStore } from "pinia";
import { ref } from "vue";

export const useSceneStore = defineStore("scene", () => {
    const wallTile = ref({
        category: "",
        name: "",
        image: "",
        size: {} as TSize,
    });

    const floorTile = ref({
        category: "",
        name: "",
        image: "",
        size: {} as TSize,
    });

    const selectedTile = ref({
        category: "",
        name: "",
        image: "",
        size: {} as TSize,
    });

    const tiles = ref<
        {
            type: string;
            category: string;
            name: string;
            image: string;
            size: TSize;
        }[]
    >([]);

    const setSelectedTile = (
        category: string,
        name: string,
        image: string,
        size: TSize
    ) => {
        selectedTile.value = { category, name, image, size };
    };

    const applySelectedTile = (type: string) => {
        if (!selectedTile.value.name) return;

        const newTile = { type, ...selectedTile.value };

        if (type === "wall") {
            wallTile.value = { ...selectedTile.value };
        } else if (type === "floor") {
            floorTile.value = { ...selectedTile.value };
        }

        const existingIndex = tiles.value.findIndex((t) => t.type === type);

        if (existingIndex !== -1) {
            tiles.value[existingIndex] = newTile;
        } else {
            tiles.value.push(newTile);
        }
    };

    const resetSelectedTile = () => {
        wallTile.value = {
            category: "",
            name: "",
            image: "",
            size: {} as TSize,
        };
        floorTile.value = {
            category: "",
            name: "",
            image: "",
            size: {} as TSize,
        };
        tiles.value = []
    };

    return {
        wallTile,
        floorTile,
        selectedTile,
        tiles,
        setSelectedTile,
        applySelectedTile,
        resetSelectedTile
    };
});
