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

#pragma once

#include "ISCW_UActorComponent.h"
#include "ISCW_UClass.h"
#include "ISCW_UObject.h"
#include <memory>
#include <string>

using std::shared_ptr;
using std::wstring;

namespace Sourcify
{	

	class ISCW_USimpleConstructionScript;

	class ISCW_USCS_Node : public virtual ISCW_UObject
	{
	public:
		virtual ~ISCW_USCS_Node() = default;

		virtual void ClearOnNameChanged() = 0;

		virtual wstring GetAttachToName() const = 0;

		virtual vector<shared_ptr<ISCW_USCS_Node>> GetChildNodes() const = 0;

		virtual ISCW_UClassConstPtr GetComponentClass() const = 0;

		virtual ISCW_UActorComponentPtr GetComponentTemplate() const = 0;

		virtual wstring GetParentComponentOrVariableName() const = 0;

		virtual shared_ptr<ISCW_USimpleConstructionScript> GetSCS() const = 0;

		virtual wstring GetVariableName() const = 0;

		virtual bool IsParentComponentNative() const = 0;

		virtual shared_ptr<ISCW_USCS_Node> ToUSCS_NodePtr() = 0;
		virtual shared_ptr<const ISCW_USCS_Node> ToUSCS_NodePtr() const = 0;
	};

	using ISCW_USCS_NodeConstPtr = shared_ptr<const ISCW_USCS_Node>;
	using ISCW_USCS_NodePtr = shared_ptr<ISCW_USCS_Node>;
} // namespace Sourcify