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

#pragma once

#include "ISCW_USCS_Node.h"
#include "ISCW_USimpleConstructionScript.h"
#include "SCW_UObject.h"

class USCS_Node;

namespace Sourcify
{
	class SCW_USCS_Node : public SCW_UObject, public virtual ISCW_USCS_Node
	{
	public:
		SCW_USCS_Node(USCS_Node* InSCS_Node);

		void ClearOnNameChanged() override;

		wstring GetAttachToName() const override;
		
		vector<shared_ptr<ISCW_USCS_Node>> GetChildNodes() const override;

		ISCW_UClassConstPtr GetComponentClass() const override;

		ISCW_UActorComponentPtr GetComponentTemplate() const override;

		wstring GetParentComponentOrVariableName() const override;

		ISCW_USimpleConstructionScriptPtr GetSCS() const override;
		
		wstring GetVariableName() const override;

		bool IsParentComponentNative() const override;

		USCS_Node* ToUSCS_Node() const;

		ISCW_USCS_NodePtr ToUSCS_NodePtr() override;
		ISCW_USCS_NodeConstPtr ToUSCS_NodePtr() const override;
		
	protected:
		USCS_Node* SCS_Node;
	};
} // namespace Sourcify