class Led {
  float _x, _y, _diameter;
  int _id; 
  color _col;
  int _spacing = 8;
  
  Led(float x, float y, float diameter, int id) {
    _x = x;
    _y = y ;
    _id = id;
    _diameter = diameter -_spacing;

    setColor(color(255));
    displayLed();
  }
  
  int getId(){
    return _id;
  }
  
  void setColor(color c) {
    _col = c;
  }

  void displayLed() {
    ellipseMode(CORNER);
    fill(_col);
    noStroke();
    //strokeWeight(5);
    ellipse(_x, _y, _diameter , _diameter );
    displayText();
    
  }

  void displayText() {
    int fontSize = 12;
    textAlign(CENTER, CENTER);
    fill(0);
    textSize(fontSize);
    text(_id, _x +_diameter/2, _y + _diameter/2);
  }
  boolean checkShapeOverLed(float xpos, float ypos){
    float disX = _x + (_diameter/2) - xpos;
    float disY = _y + (_diameter/2) - ypos;
    if (sqrt(sq(disX) + sq(disY)) < _diameter/2 ) {
      return true;
    } else {
      return false;
    }
  }
    
  boolean checkRectOverLed(float rectX, float rectY, float rectWidth, float rectHeight)
{
    float circleDistanceX;
    float circleDistanceY;
    circleDistanceX = abs(_x - rectX);
    circleDistanceY = abs(_y - rectY);

    if (circleDistanceX > (rectWidth/2 + _diameter/2)) { return false; }
    if (circleDistanceY > (rectHeight/2 +_diameter/2)) { return false; }
    if (circleDistanceX <= (rectWidth/2)) { return true; } 
    if (circleDistanceY <= (rectHeight/2)) { return true; }

    float cornerDistance_sq = sq((circleDistanceX -  rectWidth/2)) +sq((circleDistanceY - rectHeight/2));
    return (cornerDistance_sq <= (sq(_diameter/2)));
}

  boolean mouseOverLed() {
    float disX = _x + (_diameter/2) - mouseX;
    float disY = _y + (_diameter/2) - mouseY;
    if (sqrt(sq(disX) + sq(disY)) < _diameter/2 ) {
      return true;
    } else {
      return false;
    }
  }
}
