
// NoteColorLookupTable
// Lew Hill 2
// maps from an index (1-12) into a color value

#include "NoteColorLookupTable.h"

NoteColorLookupTable::NoteColorLookupTable(){
  
  init();
  setColorScheme(DEFAULT_COLOR_SCHEMA);
  //setColorScheme(PASTEL_COLOR_SCHEMA);
} 

void NoteColorLookupTable::init(){
  DEFAULT_COLOR_SCHEMA = 1;
  PASTEL_COLOR_SCHEMA = 2;

  initDefaultColorSchema();
  initPastelColorSchema();
}

void NoteColorLookupTable::initDefaultColorSchema(){

  // FF = 1
  // 99 = .59
  // 33 = .199
  // 00 = 0

  //FF3333 - RED
  defaultTable[0][0] = 1;
  defaultTable[0][1] = .2; 
  defaultTable[0][2] = .2;

  //FF9933
  defaultTable[1][0] = 1;
  defaultTable[1][1] = .59; 
  defaultTable[1][2] = .199;

  //FFFF33 -YEL
  defaultTable[2][0] = 1;
  defaultTable[2][1] = 1; 
  defaultTable[2][2] = .199;

  //99FF33
  defaultTable[3][0] = .59;
  defaultTable[3][1] = 1; 
  defaultTable[3][2] = .199;

  //33FF33 GRN
  defaultTable[4][0] = .199;
  defaultTable[4][1] = 1; 
  defaultTable[4][2] = .199;

  //33FF99
  defaultTable[5][0] = .199;
  defaultTable[5][1] = 1; 
  defaultTable[5][2] = .59;

  //33FFFF -CYN
  defaultTable[6][0] = .199;
  defaultTable[6][1] = 1; 
  defaultTable[6][2] = 1;

  //3399FF
  defaultTable[7][0] = .199;
  defaultTable[7][1] = .59; 
  defaultTable[7][2] = 1;

  //3333FF BLU
  defaultTable[8][0] = .199;
  defaultTable[8][1] = .199; 
  defaultTable[8][2] = 1;

  //9933FF
  defaultTable[9][0] = .59;
  defaultTable[9][1] = .199; 
  defaultTable[9][2] = 1;

  //FF33FF MAG
  defaultTable[10][0] = 1;
  defaultTable[10][1] = .199; 
  defaultTable[10][2] = 1;

  //FF3399
  defaultTable[11][0] = 1;
  defaultTable[11][1] = .199; 
  defaultTable[11][2] = .59;


  // byte table

  //FF3333 - RED
  defaultByteTable[0][0] = 0xff;
  defaultByteTable[0][1] = 0x33; 
  defaultByteTable[0][2] = 0x33;

  //FF9933
  defaultByteTable[1][0] = 0xff;
  defaultByteTable[1][1] = 0x99;
  defaultByteTable[1][2] = 0x33;

  //FFFF33 -YEL
  defaultByteTable[2][0] = 0xff;
  defaultByteTable[2][1] = 0xff; 
  defaultByteTable[2][2] = 0x33;

  //99FF33
  defaultByteTable[3][0] = 0x99;
  defaultByteTable[3][1] = 0xff; 
  defaultByteTable[3][2] = 0x33;

  //33FF33 GRN
  defaultByteTable[4][0] = 0x33;
  defaultByteTable[4][1] = 0xff; 
  defaultByteTable[4][2] = 0x33;

  //33FF99
  defaultByteTable[5][0] = 0x33;
  defaultByteTable[5][1] = 0xff; 
  defaultByteTable[5][2] = 0x99;

  //33FFFF -CYN
  defaultByteTable[6][0] = 0x33;
  defaultByteTable[6][1] = 0xff; 
  defaultByteTable[6][2] = 0xff;

  //3399FF
  defaultByteTable[7][0] = 0x33;
  defaultByteTable[7][1] = 0x99; 
  defaultByteTable[7][2] = 0xff;

  //3333FF BLU
  defaultByteTable[8][0] = 0x33;
  defaultByteTable[8][1] = 0x33; 
  defaultByteTable[8][2] = 0xff;

  //9933FF
  defaultByteTable[9][0] = 0x99;
  defaultByteTable[9][1] = 0x33; 
  defaultByteTable[9][2] = 0xff;

  //FF33FF MAG
  defaultByteTable[10][0] = 0xff;
  defaultByteTable[10][1] = 0x33; 
  defaultByteTable[10][2] = 0x33;

  //FF3399
  defaultByteTable[11][0] = 0xff;
  defaultByteTable[11][1] = 0x33; 
  defaultByteTable[11][2] = 0x99;

}


void NoteColorLookupTable::initPastelColorSchema(){

  // FF = 1
  // CC = .863
  // 66 = .398
  // 00 = 0

  //FF3333 - RED
  pastelTable[0][0] = 1;
  pastelTable[0][1] = .398; 
  pastelTable[0][2] = .398;

  //FF9933
  pastelTable[1][0] = 1;
  pastelTable[1][1] = .863; 
  pastelTable[1][2] = .398;

  //FFFF33 -YEL
  pastelTable[2][0] = 1;
  pastelTable[2][1] = 1; 
  pastelTable[2][2] = .398;

  //99FF33
  pastelTable[3][0] = .863;
  pastelTable[3][1] = 1; 
  pastelTable[3][2] = .398;

  //33FF33 GRN
  pastelTable[4][0] = .398;
  pastelTable[4][1] = 1; 
  pastelTable[4][2] = .398;

  //33FF99
  pastelTable[5][0] = .398;
  pastelTable[5][1] = 1; 
  pastelTable[5][2] = .863;

  //33FFFF -CYN
  pastelTable[6][0] = .398;
  pastelTable[6][1] = 1; 
  pastelTable[6][2] = 1;

  //3399FF
  pastelTable[7][0] = .398;
  pastelTable[7][1] = .863; 
  pastelTable[7][2] = 1;

  //3333FF BLU
  pastelTable[8][0] = .398;
  pastelTable[8][1] = .398; 
  pastelTable[8][2] = 1;

  //9933FF
  pastelTable[9][0] = .863;
  pastelTable[9][1] = .398; 
  pastelTable[9][2] = 1;

  //FF33FF MAG
  pastelTable[10][0] = 1;
  pastelTable[10][1] = .398; 
  pastelTable[10][2] = 1;

  //FF3399
  pastelTable[11][0] = 1;
  pastelTable[11][1] = .398; 
  pastelTable[11][2] = .863;

  // byte table

  //FF3333 - RED
  pastelByteTable[0][0] = 0xff;
  pastelByteTable[0][1] = 0x66; 
  pastelByteTable[0][2] = 0x66;

  //FF9933
  pastelByteTable[1][0] = 0xff;
  pastelByteTable[1][1] = 0xcc;
  pastelByteTable[1][2] = 0x66;

  //FFFF33 -YEL
  pastelByteTable[2][0] = 0xff;
  pastelByteTable[2][1] = 0xcc; 
  pastelByteTable[2][2] = 0x66;

  //99FF33
  pastelByteTable[3][0] = 0xcc;
  pastelByteTable[3][1] = 0xff; 
  pastelByteTable[3][2] = 0x66;

  //33FF33 GRN
  pastelByteTable[4][0] = 0x66;
  pastelByteTable[4][1] = 0xff; 
  pastelByteTable[4][2] = 0x66;

  //33FF99
  pastelByteTable[5][0] = 0x66;
  pastelByteTable[5][1] = 0xff; 
  pastelByteTable[5][2] = 0xcc;

  //33FFFF -CYN
  pastelByteTable[6][0] = 0x66;
  pastelByteTable[6][1] = 0xff; 
  pastelByteTable[6][2] = 0xff;

  //3399FF
  pastelByteTable[7][0] = 0x66;
  pastelByteTable[7][1] = 0xcc; 
  pastelByteTable[7][2] = 0xff;

  //3333FF BLU
  pastelByteTable[8][0] = 0x66;
  pastelByteTable[8][1] = 0x66; 
  pastelByteTable[8][2] = 0xff;

  //9933FF
  pastelByteTable[9][0] = 0xcc;
  pastelByteTable[9][1] = 0x66; 
  pastelByteTable[9][2] = 0xff;

  //FF33FF MAG
  pastelByteTable[10][0] = 0xff;
  pastelByteTable[10][1] = 0x66; 
  pastelByteTable[10][2] = 0xff;

  //FF3399
  pastelByteTable[11][0] = 0xff;
  pastelByteTable[11][1] = 0x66; 
  pastelByteTable[11][2] = 0xcc;

}


// returns the default coloring
float* NoteColorLookupTable::getValue(int i){
  return (getSchemaValue(i, colorSchema));
}

// returns the default coloring
GLubyte* NoteColorLookupTable::getByteValue(int i){
  return (getSchemaByteValue(i, colorSchema));
}


float* NoteColorLookupTable::getSchemaValue(int i, int inputColorSchema){
  
  if (inputColorSchema == DEFAULT_COLOR_SCHEMA){
    
    if ((i < 12) && (i >= 0)){
      return defaultTable[i];
    } else {
      return defaultTable[0];
    }
    
  } else if (inputColorSchema == PASTEL_COLOR_SCHEMA){
    
    if ((i < 12) && (i >= 0)){
      return pastelTable[i];
    } else {
      return pastelTable[0];
    }
  }

  return defaultTable[0];
}


GLubyte* NoteColorLookupTable::getSchemaByteValue(int i, int inputColorSchema){

  if (inputColorSchema == DEFAULT_COLOR_SCHEMA){
    
    if ((i < 12) && (i >= 0)){
      return defaultByteTable[i];
    } else {
      return defaultByteTable[0];
    }
    
  } else if (inputColorSchema == PASTEL_COLOR_SCHEMA){
    
    if ((i < 12) && (i >= 0)){
      return pastelByteTable[i];
    } else {
      return pastelByteTable[0];
    }
  }
  
  return defaultByteTable[0];

}




