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

#pragma once

#include "ISCW_FObjectProperty.h"
#include "ISCW_UObject.h"
#include "SCW_FObjectPropertyBase.h"

class FObjectProperty;

namespace Sourcify
{
	class SCW_FObjectProperty : public SCW_FObjectPropertyBase, public virtual ISCW_FObjectProperty
	{
	public:
		SCW_FObjectProperty(FObjectProperty* InObjectProperty);

		ISCW_UObjectPtr GetObjectPropertyValue_InContainer(shared_ptr<const ISCW_UObject> ContainerAddress, int32_t ArrayIndex = 0) const override;

		ISCW_UObjectPtr GetPropertyValue_InContainer(shared_ptr<const ISCW_UObject> ContainerAddress, int32_t ArrayIndex = 0) const override;

		void SetPropertyValue_InContainer(shared_ptr<ISCW_UObject> A, shared_ptr<const ISCW_UObject> Value, int32_t ArrayIndex = 0) const override;

		FObjectProperty* ToFObjectProperty() const;

	protected:
		FObjectProperty* ObjectProperty;
	};
} // namespace Sourcify