#ifndef __IPROPERTY__H__
#define __IPROPERTY__H__

#include <cstdint>
#include <optional>

class IProperty {
public:
	struct Info {
		std::string name;
		std::string description;
		std::string rejectionReason;
		LWOOBJID id{};
		uint32_t ownerId{};
		LWOCLONEID cloneId{};
		int32_t privacyOption{};
		uint32_t modApproved{};
		uint32_t lastUpdatedTime{};
		uint32_t claimedTime{};
		uint32_t reputation{};
	};

	// Get the property info for the given property id.
	virtual std::optional<IProperty::Info> GetPropertyInfo(const LWOMAPID mapId, const LWOCLONEID cloneId) = 0;

	// Update the property moderation info for the given property id.
	virtual void UpdatePropertyModerationInfo(const IProperty::Info& info) = 0;
	
	// Update the property details for the given property id.
	virtual void UpdatePropertyDetails(const IProperty::Info& info) = 0;

	// Update the property performance cost for the given property id.
	virtual void UpdatePerformanceCost(const LWOZONEID& zoneId, const float performanceCost) = 0;
	
	// Insert a new property into the database.
	virtual void InsertNewProperty(const IProperty::Info& info, const uint32_t templateId, const LWOZONEID& zoneId) = 0;
};
#endif  //!__IPROPERTY__H__