const scene = new THREE.Scene();
const width = 400;
const height = 300;
const camera = new THREE.PerspectiveCamera( 75, width / height, 0.01, 1000 );
camera.position.set(-0.8, 0.11, -0.9);
scene.background = new THREE.Color('white');

const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height);
const canvas = document.getElementById('brain-container');
canvas.appendChild( renderer.domElement );

// Controls
const controls = new THREE.OrbitControls(camera, canvas);
controls.enablePan = false;
controls.enableZoom = false;
controls.autoRotate = true;
controls.target.set(0, 0.5, 0);
controls.update();

// Lights
{ 
    const color = 0xFFFFFF;
    const intensity = 0.6;
    const light = new THREE.AmbientLight(color, intensity);
    scene.add(light);
}

// Upper light
{
    const color = 0xFFFFFF;
    const intensity = 1;
    const light = new THREE.DirectionalLight(color, intensity);
    light.position.set(0, 5, 0);
    light.target.position.set(0, 0.5, 0);
    scene.add(light);
    scene.add(light.target);
}

// Lower light
{
    const color = 0xFFFFFF;
    const intensity = 2;
    const light = new THREE.DirectionalLight(color, intensity);
    light.position.set(0, -5, 0);
    light.target.position.set(0, 0.5, 0);
    scene.add(light);
    scene.add(light.target);
}

var brain = null;
const objLoader = new THREE.GLTFLoader();
objLoader.load('assets/brain.gltf', (root) => {
  console.log(root.scene.children[2]);
  brain = root.scene.children[2];
  brain.children[5].material.emissive = new THREE.Color('black');
  scene.add(brain);
});

const cerebellumHighlightColor = new THREE.Color(0x9D6720);
const originalColor = new THREE.Color('black');
var highlightColors = [cerebellumHighlightColor, originalColor];
var highlightProgress = 0;
var highlightIndex = 0;

function render() {
  renderer.render(scene, camera);
  controls.update();

  if (brain) {
    highlightProgress += 0.025;
    brain.children[5].material.emissive.lerp(highlightColors[highlightIndex], highlightProgress);

    if (highlightProgress >= 1) {
      highlightProgress = 0;
      highlightIndex = (highlightIndex + 1) % 2;
    }
  }

  requestAnimationFrame(render);
}

requestAnimationFrame(render);
