// Copyright (c) 2024 Codemongous LLC. All Rights Reserved.

#pragma once

#include "ISCW_FComponentKey.h"
#include "ISCW_UActorComponent.h"
#include "ISCW_UInheritableComponentHandler.h"
#include "SCW_UObject.h"

class UInheritableComponentHandler;

namespace Sourcify
{
	class SCW_UInheritableComponentHandler : public SCW_UObject, public virtual ISCW_UInheritableComponentHandler
	{
	public:
		SCW_UInheritableComponentHandler(UInheritableComponentHandler* InInheritableComponentHandler);

		UInheritableComponentHandler* ToUInheritableComponentHandler() const;

		ISCW_UInheritableComponentHandlerPtr ToUInheritableComponentHandlerPtr() override;
		ISCW_UInheritableComponentHandlerConstPtr ToUInheritableComponentHandlerPtr() const override;

		ISCW_UActorComponentPtr CreateOverridenComponentTemplate(ISCW_FComponentKeyPtr Key) override;

		ISCW_UActorComponentPtr GetOverridenComponentTemplate(ISCW_FComponentKeyPtr Key) const override;

	protected:
		UInheritableComponentHandler* InheritableComponentHandler;
	};
} // namespace Sourcify