#pragma once

struct IShader;

/// <summary>
/// Handler für Annotations.
/// </summary>
struct IAnnotationHandler
{
	/// <summary>
	/// Der virtuelle Destruktor des Handlers.
	/// </summary>
	virtual ~IAnnotationHandler() {}

	/// <summary>
	///	Wird aufgerufen wenn eine Annotation behandelt werden soll.
	/// </summary>
	/// <param name="inShader">Der Shader welcher den Handler aufgerufen hat.</param>
	/// <param name="inAnnotationHandle">Ein Handle zum Annotation.</param>
	virtual void OnHandle(IShader* inShader, D3DXHANDLE inAnnotationHandle) = 0;

	/// <summary>
	///	Wird aufgerufen wenn eine ShaderSystem Refresh geschehen ist.
	/// </summary>
	/// <param name="inShader">Der Shader der sich auffrischen soll.</param>
	virtual void OnShaderSystemRefresh(IShader* inShader) = 0;

	/// <summary>
	///	Der Top-Level Parameter, Technik oder Pass welcher zum auffinden der Annotation benötigt wird.
	/// </summary>
	/// <returns>Den Top-Level parameter, Pass oder die Technik.</returns>
	virtual const std::string& get_TopLevelName() const = 0;

	/// <summary>
	///	Der Annotationsname nach dem gesucht werden soll.
	/// </summary>
	/// <returns>Den Annotationsnamen.</returns>
	virtual const std::string& get_Name() const = 0;
};
