/*
 *  Presets color palletes
 *  
 *  Cycle from the list below
 *  
 */

#define COLLOR_PALLETES_SIZE 12 //No of color pallete defined
#define C_RED {255, 0, 0}
#define C_ORANGE {255, 165, 0}
#define C_YELLOW {255, 255, 0}
#define C_YELLOWGREEN {170, 255, 0}
#define C_GREEN {0, 255, 0}
#define C_TEAL {0, 255, 166}
#define C_TURQUOISE {64, 224, 208}
#define C_CYAN {0, 255, 255}
#define C_BLUE {0, 0, 255}
#define C_PURPLE {255, 0, 255}
#define C_LAVENDER {174, 0, 255}
#define C_PINK {255, 0, 115}


//Load the default runtime for RGB Mode
int colorPalletes[COLLOR_PALLETES_SIZE][3] = {
  C_RED, 
  C_ORANGE, 
  C_YELLOW,
  C_YELLOWGREEN, 
  C_GREEN, 
  C_TEAL, 
  C_TURQUOISE, 
  C_CYAN, 
  C_BLUE, 
  C_LAVENDER, 
  C_PURPLE, 
  C_PINK
 };

//initiate preset mode
void loadPresetsDefault() {
  //Reset paramters
  adjustingCatergory = 0;
  //Set color pallete id to 0 (red), brightness to 50%, (last byte unused)
  values[0] = 0;
  values[1] = 50;
  values[2] = 0;

  //Update the color to the LEDs
  renderColorPallete(values[0]);
}

//Handlers for add / minus button
void handlePresetsAdd() {
  if (adjustingCatergory == 0){
    //Change pallete
    values[0] = values[0] + 1;
    if (values[0] > COLLOR_PALLETES_SIZE - 1){
      values[0] = 0;
    }
  }else{
    //Change intensity
    values[1]++;
    if (values[1] > 100){
      values[1] = 100;
      blinkUpperLimit();
    }
  }
  renderColorPallete(values[0]);
}

void handlePresetsMinus(){
  if (adjustingCatergory == 0){
    //Change pallete
    values[0] = values[0] - 1;
    if (values[0] < 0){
      values[0] = COLLOR_PALLETES_SIZE - 1;
    }
  }else{
    //Change intensity
    values[1]--;
    if (values[1] < 1){
      values[1] = 1;
      blinkLowerLimit();
    }
  }
  renderColorPallete(values[0]);
}

void renderColorPallete(int palleteID){
  //Load the color pallete
    int palleteRGB[3] = {
      colorPalletes[values[0]][0], 
      colorPalletes[values[0]][1], 
      colorPalletes[values[0]][2]
    };

    //Set control LED color
    if (adjustingCatergory == 0){
      //Color pallete selection mode
      setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS);
    }else{
      //Brightness selection mode
      setControlLEDColor(MAX_CTRLBRIGHTNESS, MAX_CTRLBRIGHTNESS, 0);
    }
    
     
    //Adjust intensity
    palleteRGB[0] = int(float(palleteRGB[0]) * float(values[1]) / 100.0);
    palleteRGB[1] = int(float(palleteRGB[1]) * float(values[1]) / 100.0);
    palleteRGB[2] = int(float(palleteRGB[2]) * float(values[1]) / 100.0);

    /*
    //Debug output
    Serial.print(palleteRGB[0]);
    Serial.print(",");
    Serial.print(palleteRGB[1]);
    Serial.print(",");
    Serial.println(palleteRGB[2]);
    */
    
    //Update light color
    setLightColor(palleteRGB[0], palleteRGB[1], palleteRGB[2]);
    delay(100);
}
