//
//  expMessageOrganiser.cpp
//  riftathon
//
//  Created by Robert Tubb on 21/10/2014.
//
//

#include "ExpMessageOrganiser.h"

void ExpMessageOrganiser::init( PDSynthWrapper& cs, PDSynthWrapper& ts){
    numParamsToUse = TOTAL_NUM_PARAMS;
    MessageOrganiser::init(cs,ts);
    
}
void ExpMessageOrganiser::setup(controlPanelType whichInterfaceAreWeUsing){

    
    setupDefaultMapping(whichInterfaceAreWeUsing);
    expPresetManager.goToFirstEmptySlot();
    showCurrentSlot();
    instructionPanel->setLabel("Find a sound\n that expresses:");
    instructionPanel->show();
    bottomPanel->show();
    controlPanel->show();
    controlPanel->showHint(false);
    controlPanel->showValueIndicators(true);
    
    okToGetMidi = true;
    controlPanel->setActive(true); 
}


vector<int> ExpMessageOrganiser::getMappingIDsFromSynths(){
    vector<int> index;
    for(int i = 0; i < numParamsToUse; i++){
        index.push_back(i);
    }
    vector<int> mids = candidateSynth.getMappingIDForIndices(index);
    
    return mids;
}

void ExpMessageOrganiser::showCurrentSlot(){

    if(expPresetManager.getCurrentPresetSlot() == NULL){
        // hide next button
        return;
    }
    presetIconPanel->setTextAndImage(expPresetManager.getCurrentPresetSlot()->name, expPresetManager.getCurrentPresetSlot()->getImage(),expPresetManager.getCurrentPresetSlot()->isFilled);
    
    controlPanel->setIndicatorTexture(expPresetManager.getCurrentPresetSlot()->getImage());
    
    if(expPresetManager.getCurrentPresetSlot()->isFilled){
        // show this preset on sliders
        loadPreset(expPresetManager.getCurrentPresetSlot()->name);
    }else{
        // show default slidervals
        loadDefaultSound();
        
    }
}

void ExpMessageOrganiser::loadPreset(string pname){
    
    vector<int> values = expPresetManager.getPresetValuesForName(pname);
    if (values.size()){
        candidateSynth.setAllParams(values);
        setAllSlidersToValues(values);
    }else{
        cout << "ERROR, no preset found" << endl;
    }
}
void ExpMessageOrganiser::loadDefaultSound(){
    vector<int> values;
    for(int i = 0; i < TOTAL_NUM_PARAMS; i++){
        values.push_back(0);
    }

    candidateSynth.setAllParams(values);
    setAllSlidersToValues(values);

}


//-----------------------------------------------------------------------------

void ExpMessageOrganiser::buttonPressCallback(int mappingID, int value){
    
    
    if (mappingID == TRIGGER_CANDIDATE_ID){
        triggerCandidateSound();
        
        return;
    }
    if(mappingID == SAVE_PRESET_HIT){
        
        bool finished = expPresetManager.writeValuesToSlot(candidateSynth.getAllParamValues());
        if(finished){
            instructionPanel->setText("ALL PRESETS MADE\n Please restart and go to TRAIN stage");
            instructionPanel->show();
            bottomPanel->hide();

            controlPanel->hide();
            
        }else{
            showCurrentSlot();
        }
        
        return;
    }
    
}

