import * as THREE from 'three';


	//  rack donatello
	export function donatello(param) {
		
		const don_rackObject = new THREE.Object3D();
	
		const materialGreyDark= new THREE.MeshLambertMaterial({color: 0x9d9d9d});
		const materialGreyMedium= new THREE.MeshLambertMaterial({color: 0x636363});
		const materialVeryGreyDark= new THREE.MeshLambertMaterial({color: 0x242424});
		const silvermaterial = new THREE.MeshLambertMaterial({color: 0xf0f0f0});
		const greenmaterial = new THREE.MeshLambertMaterial({color: 0x17fc03});
		const greenmaterial2 = new THREE.MeshLambertMaterial({color: 0x0f993b});
		const emergencymaterial = new THREE.MeshLambertMaterial({color: 0xff0000});
		const redmaterial = new THREE.MeshLambertMaterial({color: 0xff0000});
		const yellowmaterial = new THREE.MeshLambertMaterial({color: 0xcc9d02});
		const materialBrown= new THREE.MeshLambertMaterial({color: 0x654321});

		
		// rack
		const lrgeometry = new THREE.BoxGeometry(800, 2000, 800);
		const lrmesh = new THREE.Mesh(lrgeometry, silvermaterial);
		lrmesh.position.set(0 , 0 , 0);
		don_rackObject.add(lrmesh);
		
		//edge le		
		const rlegeometry = new THREE.BoxGeometry(50, 2000, 50);
		const rlemesh = new THREE.Mesh(rlegeometry, materialBrown);
		rlemesh.position.set( -425, 0 , -370);
		don_rackObject.add(rlemesh);	
		
		//edge re		
		const rregeometry = new THREE.BoxGeometry(50, 2000, 50);
		const rremesh = new THREE.Mesh(rregeometry, materialBrown);
		rremesh.position.set( -425, 0 , 375);
		don_rackObject.add(rremesh);		
		
		//edge ue		
		const ruegeometry = new THREE.BoxGeometry(50, -50, 750);
		const ruemesh = new THREE.Mesh(ruegeometry, materialBrown);
		ruemesh.position.set( -426, 975 , 0);
		don_rackObject.add(ruemesh);			
		
		//edge de		
		const rdegeometry = new THREE.BoxGeometry(50, -50, 750);
		const rdemesh = new THREE.Mesh(rdegeometry, materialBrown);
		rdemesh.position.set( -426, -975 , 0);
		don_rackObject.add(rdemesh);
		
		//GreenButton
		const greenbutton = new THREE.CylinderGeometry(55, 55, 40, 15);
		const greenbuttonmesh = new THREE.Mesh(greenbutton, greenmaterial);
		greenbuttonmesh.rotateX(Math.PI * 0.5);
		greenbuttonmesh.rotateY(Math.PI * 1);
		greenbuttonmesh.rotateZ(Math.PI * 0.5);
		greenbuttonmesh.position.set(-400, 700 , 70);		
		don_rackObject.add(greenbuttonmesh);		
		
		//GreenLed
		const greenled = new THREE.CylinderGeometry(40, 40, 40, 15);
		const greenledmesh = new THREE.Mesh(greenled, greenmaterial2);
		greenledmesh.rotateX(Math.PI * 0.5);
		greenledmesh.rotateY(Math.PI * 1);
		greenledmesh.rotateZ(Math.PI * 0.5);
		greenledmesh.position.set(-400, 700 , 200);		
		don_rackObject.add(greenledmesh);			

		//RedButton
		const redbutton = new THREE.CylinderGeometry(55, 55, 40, 15);
		const redbuttonmesh = new THREE.Mesh(redbutton, redmaterial);
		redbuttonmesh.rotateX(Math.PI * 0.5);
		redbuttonmesh.rotateY(Math.PI * 1);
		redbuttonmesh.rotateZ(Math.PI * 0.5);
		redbuttonmesh.position.set(-400, 550 , 70);		
		don_rackObject.add(redbuttonmesh);			

		//YelloyLed
		const yellowled = new THREE.CylinderGeometry(40, 40, 40, 15);
		const yellowledmesh = new THREE.Mesh(yellowled, yellowmaterial);
		yellowledmesh.rotateX(Math.PI * 0.5);
		yellowledmesh.rotateY(Math.PI * 1);
		yellowledmesh.rotateZ(Math.PI * 0.5);
		yellowledmesh.position.set(-400, 550 , 200);		
		don_rackObject.add(yellowledmesh);	
		
		//EmergenctButton
		const emergencybutton = new THREE.CylinderGeometry(80, 80, 40, 15);
		const emergencybuttonmesh = new THREE.Mesh(emergencybutton, emergencymaterial);
		emergencybuttonmesh.rotateX(Math.PI * 0.5);
		emergencybuttonmesh.rotateY(Math.PI * 1);
		emergencybuttonmesh.rotateZ(Math.PI * 0.5);
		emergencybuttonmesh.position.set(-400, 330 , 150);		
		don_rackObject.add(emergencybuttonmesh);	

		//display up		
		const displayupgeometry = new THREE.BoxGeometry(50, 50, 150);
		const displayupgeometrymesh = new THREE.Mesh(displayupgeometry, materialVeryGreyDark);
		displayupgeometrymesh.position.set( -400, 700 , -150);
		don_rackObject.add(displayupgeometrymesh);			
		
		//display2 down		
		const displayupgeometry2 = new THREE.BoxGeometry(50, 50, 150);
		const displayupgeometrymesh2 = new THREE.Mesh(displayupgeometry2, materialVeryGreyDark);
		displayupgeometrymesh2.position.set( -400, 600 , -150);
		don_rackObject.add(displayupgeometrymesh2);			
		
		//fan1	
		const fan1geometry = new THREE.BoxGeometry(10, 200, 200);
		const fan1geometrymesh = new THREE.Mesh(fan1geometry, materialVeryGreyDark);
		fan1geometrymesh.position.set( -400, 50 , 150);
		don_rackObject.add(fan1geometrymesh);	
		//fan2	
		const fan2geometry = new THREE.BoxGeometry(10, 200, 200);
		const fan2geometrymesh = new THREE.Mesh(fan2geometry, materialVeryGreyDark);
		fan2geometrymesh.position.set( -400, -170 , 150);
		don_rackObject.add(fan2geometrymesh);			
		
		//Lgrid2 down	
		const grid2geometry = new THREE.BoxGeometry(10, 200, 520);
		const textureLoader2 = new THREE.TextureLoader();
		const texture2 = textureLoader2.load('./components/grid_texture.png');	
		texture2.wrapS = texture2.wrapT = THREE.RepeatWrapping;
		texture2.repeat.set(50, 1);		
		const material2 = new THREE.MeshBasicMaterial({ map: texture2 });		
		const grid2geometrymesh = new THREE.Mesh(grid2geometry, material2);
		grid2geometrymesh.rotateX(Math.PI * 1);
		grid2geometrymesh.rotateY(Math.PI * 1);
		grid2geometrymesh.rotateZ(Math.PI * 1);
		grid2geometrymesh.position.set( -400, -650 , -10);
		don_rackObject.add(grid2geometrymesh);		
		
		return don_rackObject;
	}