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

#pragma once

#include "ISCW_EngineVersionComparison.h"
#include "ISCW_UObject.h"
#include <memory>
#include <string>

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

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

		virtual shared_ptr<ISCW_UPackage> ToUPackagePtr() = 0;
		virtual shared_ptr<const ISCW_UPackage> ToUPackagePtr() const = 0;

#if ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)
		virtual shared_ptr<class ISCW_UMetaData> GetMetaData() const = 0;
#else
		virtual shared_ptr<class ISCW_FMetaData> GetMetaData() const = 0;
#endif // ISCW_UE_VERSION_OLDER_THAN(5, 6, 0)

		virtual wstring GetPathName() const = 0;

		virtual bool IsDirty() const = 0;
	};

	using ISCW_UPackageConstPtr = shared_ptr<const ISCW_UPackage>;
	using ISCW_UPackagePtr = shared_ptr<ISCW_UPackage>;
} // namespace Sourcify