#if defined _store_inventory_included
  #endinput
#endif
#define _store_inventory_included

enum Store_ItemUseAction
{
	Store_EquipItem,
	Store_UnequipItem,
	Store_DeleteItem,
	Store_DoNothing
}

functag Store_ItemGetAttributesCallback public(const String:itemName[], const String:attrs[]);
functag Store_ItemUseCallback Store_ItemUseAction:public(client, itemId, bool:equipped);

/**
 * Opens the inventory menu for a client.
 *
 * @param client			Client index.
 *
 * @noreturn
 */
native Store_OpenInventory(client);

/**
 * Opens the inventory menu for a client in a specific category.
 *
 * @param client			Client index.
 * @param categoryId		The category that you want to open.
 *
 * @noreturn
 */
native Store_OpenInventoryCategory(client, categoryId);

/**
 * Registers an item type. 
 *
 * A type of an item defines its behaviour. Once you register a type, 
 * the store will provide two callbacks for you:
 * 	- Use callback: called when a player selects your item in his inventory.
 *	- Attributes callback: called when the store loads the attributes of your item (optional).
 *
 * It is recommended that each plugin registers *one* item type. 
 *
 * @param type			Item type unique identifer - maximum 32 characters, no whitespaces, lower case only.
 * @param useCallback	Called when a player selects your item in his inventory.
 * @param attrsCallback	Called when the store loads the attributes of your item.
 *
 * @noreturn
 */
native Store_RegisterItemType(const String:type[], Store_ItemUseCallback:useCallback, Store_ItemGetAttributesCallback:attrsCallback = Store_ItemGetAttributesCallback:0);

/**
 * Determines whether or not a specific item type string is registered.
 *
 * @param type			Item type unique identifer.
 *
 * @return True if registered, false otherwise.
 */
native bool:Store_IsItemTypeRegistered(const String:type[]);

/**
 * Calls item type's attributes callback.
 *
 * This method is designed for store-database, that loads attributes from the database.
 * It shouldn't be used anywhere else.
 *
 * @param type			Item type unique identifer.
 * @param itemName
 * @param attrs
 *
 * @return True if successful, false otherwise.
 */
native bool:Store_CallItemAttrsCallback(const String:type[], const String:itemName[], const String:attrs[]);

public SharedPlugin:__pl_store_inventory =
{
    name = "store-inventory",
    file = "store-inventory.smx",
#if defined REQUIRE_PLUGIN
    required = 1,
#else
    required = 0,
#endif
};

#if defined REQUIRE_PLUGIN
public __pl_store_inventory_SetNTVOptional()
{
	MarkNativeAsOptional("Store_OpenInventory");  
	MarkNativeAsOptional("Store_OpenInventoryCategory");  	
	
	MarkNativeAsOptional("Store_RegisterItemType"); 
	MarkNativeAsOptional("Store_IsItemTypeRegistered");
	
	// MarkNativeAsOptional("Store_CallItemAttrsCallback");
}
#endif