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

#pragma once
#include "ISCW_UObject.h"
#include "ISCW_USCS_Node.h"
#include <memory>
#include <string>
#include <vector>

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

namespace Sourcify
{	
	class ISCW_USimpleConstructionScript : public virtual ISCW_UObject
	{
	public:
		virtual ~ISCW_USimpleConstructionScript() = default;

		virtual ISCW_USCS_NodePtr FindSCSNode(const wstring& NodeName) const = 0;

		virtual vector<ISCW_USCS_NodePtr> GetAllNodes() const = 0;

		virtual shared_ptr<class ISCW_UBlueprint> GetBlueprint() const = 0;

		virtual ISCW_USCS_NodeConstPtr GetDefaultSceneRootNode() const = 0;
		virtual ISCW_USCS_NodePtr GetDefaultSceneRootNode() = 0;
		
		virtual vector<ISCW_USCS_NodePtr> GetRootNodes() const = 0;

		virtual void RemoveNodeAndPromoteChildren(ISCW_USCS_NodePtr Node) = 0;

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

		virtual void ValidateSceneRootNodes() const = 0;
	};

	using ISCW_USimpleConstructionScriptConstPtr = shared_ptr<const ISCW_USimpleConstructionScript>;
	using ISCW_USimpleConstructionScriptPtr = shared_ptr<ISCW_USimpleConstructionScript>;
} // namespace Sourcify