#pragma once

#include <string>
#include "IObject.h"


struct r_ParameterType
{
	enum Enumeration
	{
		None,
		CheckBox,
		EditBox,
		Slider,
		Button
	};
};


struct IDirect3D9BasePlugin;
struct __declspec(novtable) __declspec(uuid("{995C9228-F0A8-4617-9A7F-4F7EA30B31F2}")) IParameter
	: public IObject
{
	virtual r_ParameterType::Enumeration get_ParameterType() const = 0;
	virtual std::wstring get_Name() const = 0;
	virtual std::wstring get_Description() const = 0;

	virtual void set_DisplayText(const std::wstring& as_Text) = 0;
	virtual std::wstring get_DisplayText() const = 0;

	virtual void ResetToDefault() = 0;

	virtual GUID get_Id() const = 0;

	virtual std::wstring ToString() = 0;
	virtual void FromString(const std::wstring& as_Value) = 0;

	virtual IDirect3D9BasePlugin* get_Owner() const = 0;
};


struct __declspec(novtable) __declspec(uuid("{7F98D6A2-DE51-4482-B3E3-254C5CEE6992}")) IEditBoxParameter
{
	virtual void set_DefaultValue(const std::wstring& as_Value) = 0;
	virtual std::wstring get_DefaultValue() const = 0;

	virtual void set_CurrentValue(const std::wstring& as_Value) = 0;
	virtual std::wstring get_CurrentValue() const = 0;
};


struct __declspec(novtable) __declspec(uuid("{7AAB8AD7-2F23-44dc-88F5-26B458C3683D}")) ICheckBoxParameter
{
	virtual void set_DefaultValue(bool ab_Value) = 0;
	virtual bool get_DefaultValue() const = 0;

	virtual void set_CurrentValue(bool ab_Value) = 0;
	virtual bool get_CurrentValue() const = 0;
};


struct __declspec(novtable) __declspec(uuid("{6EBB8B9E-6B8F-47ad-A5B7-189AAEFEB83C}")) ISliderParameter
{
	virtual void set_MaxValue(int ai_Value) = 0;
	virtual int get_MaxValue() const = 0;
	
	virtual void set_MinValue(int ai_Value) = 0;
	virtual int get_MinValue() const = 0;

	virtual void set_DefaultValue(int ai_Value) = 0;
	virtual int get_DefaultValue() const = 0;

	virtual void set_CurrentValue(int ai_Value) = 0;
	virtual int get_CurrentValue() const = 0;
};
