let canvas = document.getElementById('scene');
let ctx = canvas.getContext("2d");


let resizeCanvas = () => {
  canvas.width = window.innerWidth;
  canvas.height = window.innerHeight;  
}
resizeCanvas()


let onResize = (event) => {
  resizeCanvas()
}

window.addEventListener('resize', onResize);

// ctx.fillStyle = "green";
// ctx.fillRect(300, 300, 100, 100);




class Boule {
  constructor(x, y, s) {
    // this.x = x;
    // this.y = y;
    this.pos = {
      x: x,
      y: y
    }
    this.size = s
    this.vx = -2+Math.random()*6;
    this.vy = -2+Math.random()*6;
    // this.color = 'hsl(360, 50%, 50%)'
    this.color = {
      h:360,
      s:50,
      l:50
    }
    this.img = new Image();
    this.img.src = "images/galette.png";

  }

  draw(){
    // console.log('draw', this);
    // ctx.beginPath();
    // ctx.fillStyle = `hsl(${this.color.h},${this.color.s}%,${this.color.l}%)`;
    // ctx.arc(this.pos.x, this.pos.y, this.size, 0, 2 * Math.PI);
    // // ctx.fillRect(300, 300, 100, 100);
    // ctx.fill();
    // ctx.closePath();

    // this.img.onload = () => {
    //   // console.log('img, x, y', this.img, this.pos.x, this.pos.y);
      ctx.drawImage(this.img, this.pos.x, this.pos.y, 3*this.size, 5*this.size);
    // }
    
    

  }

  move(){
    this.pos.x += this.vx;
    this.pos.y += this.vy;

    if(this.pos.x >= canvas.width || this.pos.x <= 0){
      this.vx *= -1;
    }
    if(this.pos.y >= canvas.height || this.pos.y <= 0){
      this.vy *= -1;
    }

    this.draw();
  }
}




let boules = [];
let maboule;
function createBoule(){
  maboule = new Boule(
    canvas.width / 2, // Math.random()*canvas.width, 
    canvas.height / 2, // Math.random()*canvas.height,
    10+Math.random()*30
  );
  maboule.draw();
  boules.push(maboule);
}

// for (let index = 0; index < 10000; index++) {
  // createBoule();  
// }

setInterval(()=>{
  createBoule();
}, 1000)

let anime = () => {
  ctx.clearRect(0,0, canvas.width, canvas.height)
  // boules.forEach((boule_a) => {
  for (let i = 0; i < boules.length; i++) {
    let boule_a = boules[i];
    for (let j = i+1; j < boules.length; j++) {
      let boule_b = boules[j];
      // distance entre les centre des boules
      let dist = Math.sqrt(
        Math.pow(boule_b.pos.x - boule_a.pos.x, 2) + 
        Math.pow(boule_b.pos.y - boule_a.pos.y, 2)
      );
      // console.log('dist', dist);
      
      if(dist < boule_a.size+boule_b.size){
        // console.log('ça touche');
        
        // distance inferieure a la somme des deux rayons
        // ça touche
        // boule_a.vx *= -1;
        // boule_a.vy *= -1;
        // boule_b.vx *= -1;
        // boule_b.vy *= -1;

        nx = (boule_b.pos.x - boule_a.pos.x)/dist;
        ny = (boule_b.pos.y - boule_a.pos.y)/dist;

        vA_n = boule_a.vx*nx + boule_a.vy*ny
        vB_n = boule_b.vx*nx + boule_b.vy*ny

        boule_a.vx +=  (vB_n - vA_n) * nx
        boule_a.vy += (vB_n - vA_n) * ny
        boule_b.vx += (vA_n - vB_n) * nx
        boule_b.vy += (vA_n - vB_n) * ny
        boule_a.move();
        boule_b.move();
      }
    }
    boule_a.move();
  }


  
  window.requestAnimationFrame(anime);  
}

window.requestAnimationFrame(anime);


let onMouseMove = (event) => {
  // console.log('event', event);
  // h 0 -> 360
  // x 0 -> canvas.width
  let h = 360 * (event.x / canvas.width);
  // console.log('h', h);
  
  let s = 100 * (event.y / canvas.height)
  console.log('s', s);
  
  boules.forEach(boule => {
    boule.color.h = h;
    boule.color.s = s;
  });
}

window.addEventListener('mousemove', onMouseMove);