#ifndef ICOLORCORRECTION_H
#define ICOLORCORRECTION_H

#ifdef _WIN32
#pragma once
#endif

#include "interface.h"
#include "imageformat.h"

typedef unsigned int ColorCorrectionHandle_t;
struct ShaderColorCorrectionInfo_t;

#define COLORCORRECTION_INTERFACE_VERSION "COLORCORRECTION_VERSION_1"

abstract_class IColorCorrectionSystem
{
public:
	virtual void Init() = 0;
	virtual void Shutdown() = 0;

	virtual ColorCorrectionHandle_t AddLookup(const char* pName) = 0;
	virtual bool RemoveLookup(ColorCorrectionHandle_t handle) = 0;

	virtual void  SetLookupWeight(ColorCorrectionHandle_t handle, float flWeight) = 0;
	virtual float GetLookupWeight(ColorCorrectionHandle_t handle) = 0;
	virtual float GetLookupWeight(int i) = 0;

	virtual void LockLookup() = 0;
	virtual void LockLookup(ColorCorrectionHandle_t handle) = 0;

	virtual void UnlockLookup() = 0;
	virtual void UnlockLookup(ColorCorrectionHandle_t handle) = 0;

	virtual void SetLookup(RGBX5551_t inColor, color24 outColor) = 0;
	virtual void SetLookup(ColorCorrectionHandle_t handle, RGBX5551_t inColor, color24 outColor) = 0;

	virtual color24 GetLookup(RGBX5551_t inColor) = 0;
	virtual color24 GetLookup(ColorCorrectionHandle_t handle, RGBX5551_t inColor) = 0;

	virtual void LoadLookup(const char* pLookupName) = 0;
	virtual void LoadLookup(ColorCorrectionHandle_t handle, const char* pLookupName) = 0;

	virtual void CopyLookup(const color24* pSrcColorCorrection) = 0;
	virtual void CopyLookup(ColorCorrectionHandle_t handle, const color24* pSrcColorCorrection) = 0;

	virtual void ResetLookup(ColorCorrectionHandle_t handle) = 0;
	virtual void ResetLookup() = 0;

	virtual void ReleaseTextures() = 0;
	virtual void RestoreTextures() = 0;

	virtual void ResetLookupWeights() = 0;

	virtual int GetNumLookups() = 0;

	virtual color24 ConvertToColor24(RGBX5551_t inColor) = 0;

	virtual void SetResetable(ColorCorrectionHandle_t handle, bool bResetable) = 0;

	virtual void EnableColorCorrection(bool bEnable) = 0;

	virtual void GetCurrentColorCorrection(ShaderColorCorrectionInfo_t* pInfo) = 0;
};

#endif