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

#pragma once

#include "ISCW_UFunction.h"
#include "SCW_UStruct.h"
#include "ISCW_FProperty.h"

class UFunction;

namespace Sourcify
{
	class SCW_UFunction : public SCW_UStruct, public virtual ISCW_UFunction
	{
	public:
		SCW_UFunction(UFunction* InFunction);
				
		SCW_EFunctionFlags GetFunctionFlags() const override;

		ISCW_UFunctionPtr GetSuperFunction() const override;

		bool HasAllFunctionFlags(SCW_EFunctionFlags FlagsToCheck) const override;
		
		bool HasAnyFunctionFlags(SCW_EFunctionFlags FlagsToCheck) const override;

		bool IsSignatureCompatibleWith(ISCW_UFunctionConstPtr OtherFunction) const override;

		bool IsSignatureCompatibleWith(ISCW_UFunctionConstPtr OtherFunction, uint64_t IgnoreFlags) const override;

		UFunction* ToUFunction() const;

		ISCW_UFunctionPtr ToUFunctionPtr() override;
		ISCW_UFunctionConstPtr ToUFunctionPtr() const override;
		
	protected:
		UFunction* Function;
	};
} // namespace Sourcify