/*-----------------------------------------------------------------------------

� 1999, Steinberg Soft und Hardware GmbH, All Rights Reserved

-----------------------------------------------------------------------------*/
#ifndef __PLUGIN_H
#define __PLUGIN_H

#include "public.sdk/source/vst2.x/audioeffectx.h"
#include <reverb/reverb.hpp>
#include "param.hpp"

class Plugin : public AudioEffectX
{
	static const uint DELAY_MAX = 48000;
	static const uint NUM_PARMS = 8;

	public:
	Plugin(audioMasterCallback audioMaster);
	~Plugin();

	// Processing
	virtual void processReplacing (float** inputs, float** outputs, VstInt32 sampleFrames);

	// Program
	virtual void setProgramName (char* name);
	virtual void getProgramName (char* name);

	// Parameters
	virtual void setParameter (VstInt32 index, float value);
	virtual float getParameter (VstInt32 index);
	virtual void getParameterLabel (VstInt32 index, char* label);
	virtual void getParameterDisplay (VstInt32 index, char* text);
	virtual void getParameterName (VstInt32 index, char* text);

	virtual void setSampleRate(float sampleRate);
	virtual void setBlockSize(VstInt32 blockSize);

protected:
	char programName[32];
	char dbgStr[80];

private:
	Reverb<float, 8> m_reverb_1;
	Reverb<float, 8> m_reverb_2;
	uint m_feedback_delay[2];
	Param *m_params[NUM_PARMS];
};

#endif // __PLUGIN_H
