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

#pragma once

#include "ISCW_UBlueprint.h"
#include "ISCW_UObject.h"
#include <memory>
#include <string>
#include <vector>

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

namespace Sourcify
{	
	class ISCW_FSubobjectDataHandle;

	class ISCW_FSubobjectData
	{
	public:
		virtual ~ISCW_FSubobjectData() = default;

		virtual vector<shared_ptr<const ISCW_FSubobjectDataHandle>> GetChildrenHandles() const = 0;

		virtual ISCW_UObjectConstPtr GetObject(bool bEvenIfPendingKill = false) const = 0;

		virtual ISCW_UObjectConstPtr GetObjectForBlueprint(ISCW_UBlueprintPtr Blueprint) const = 0;

		virtual wstring GetVariableName() const = 0;

		virtual shared_ptr<ISCW_FSubobjectData> ToFSubobjectDataPtr() = 0;
		virtual shared_ptr<const ISCW_FSubobjectData> ToFSubobjectDataPtr() const = 0;
	};

	using ISCW_FSubobjectDataConstPtr = shared_ptr<const ISCW_FSubobjectData>;
	using ISCW_FSubobjectDataPtr = shared_ptr<ISCW_FSubobjectData>;
} // namespace Sourcify