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

#pragma once

#include "ISCW_USimpleConstructionScript.h"
#include "ISCW_UBlueprint.h"
#include "SCW_UObject.h"

class USimpleConstructionScript;

namespace Sourcify
{
	class SCW_USimpleConstructionScript : public SCW_UObject, public ISCW_USimpleConstructionScript
	{
	public:
		SCW_USimpleConstructionScript(USimpleConstructionScript* InSimpleConstructionScript);

		USimpleConstructionScript* ToUSimpleConstructionScript() const;

		ISCW_USimpleConstructionScriptPtr ToUSimpleConstructionScriptPtr() override;
		
		ISCW_USimpleConstructionScriptConstPtr ToUSimpleConstructionScriptPtr() const override;

		ISCW_USCS_NodePtr FindSCSNode(const wstring& NodeName) const override;

		vector<ISCW_USCS_NodePtr> GetAllNodes() const override;

		ISCW_UBlueprintPtr GetBlueprint() const override;
		
		ISCW_USCS_NodeConstPtr GetDefaultSceneRootNode() const override;
		ISCW_USCS_NodePtr GetDefaultSceneRootNode() override;
		
		vector<ISCW_USCS_NodePtr> GetRootNodes() const override;

		void RemoveNodeAndPromoteChildren(ISCW_USCS_NodePtr Node) override;

		void ValidateSceneRootNodes() const override;

	protected:
		USimpleConstructionScript* SimpleConstructionScript;
	};
} // namespace Sourcify