import * as THREE from 'three';

import * as Types from "../../../../types/world/worldTypes";

function hideWalls(
    visibility: Types.Boolean,
    scene: THREE.Scene,
    camera: THREE.Camera
): void {

    //////////  Altering the visibility of the Walls when the world direction of the wall is facing the camera  //////////

    const v = new THREE.Vector3();
    const u = new THREE.Vector3();

    if (visibility === true) {
        for (const children of scene.children) {
            if (children.name === "Walls" && children.children[0]?.children.length > 0) {
                children.children[0].children.forEach((child: any) => {
                    if (child.children[0]?.userData.WallType === "RoomWall") {
                        child.children[0].getWorldDirection(v);
                        camera.getWorldDirection(u);
                        if (child.children[0].material) {
                            child.children[0].material.visible = (2 * v.dot(u)) >= -0.5;
                        }
                    }
                });
            }
        }
    } else {
        for (const children of scene.children) {
            if (children.name === "Walls" && children.children[0]?.children.length > 0) {
                children.children[0].children.forEach((child: any) => {
                    if (child.children[0]?.userData.WallType === "RoomWall") {
                        if (child.children[0].material) {
                            child.children[0].material.visible = true;
                        }
                    }
                });
            }
        }
    }
}

export default hideWalls;
