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

#pragma once

#include "ISCW_UEnum.h"
#include "SCW_UField.h"
#include <string>

using std::wstring;

class UEnum;

namespace Sourcify
{
	class SCW_UEnum : public SCW_UField, public virtual ISCW_UEnum
	{
	public:
		SCW_UEnum(UEnum* InUserDefinedEnum);

		wstring GetDisplayNameTextByIndex(uint32_t Index) const override;

		SCW_ECppForm GetCppForm() const override;

		int32_t GetIndexByNameString(const wstring& SearchString, SCW_EGetByNameFlags Flags = SCW_EGetByNameFlags::None) const override;

		wstring GetName() const override;

		wstring GetNameByIndex(uint32_t Index) const override;

		wstring GetNameStringByValue(int64_t Value) const override;

		int64_t GetValueByIndex(uint32_t Index) const override;

		int64_t GetValueByName(const wstring& Name, SCW_EGetByNameFlags Flags = SCW_EGetByNameFlags::None) const override;

		int64_t GetValueByNameString(const wstring& Name, SCW_EGetByNameFlags Flags = SCW_EGetByNameFlags::None) const override;
		
		bool HasAnyEnumFlags(SCW_EEnumFlags Flags) const override;

		uint32_t NumEnums() const override;

		UEnum* ToUEnum() const;

	protected:
		UEnum* Enum;
	};
} // namespace Sourcify