#if defined AMXX_SHOP_API_VERSION
  #endinput
#endif
#define AMXX_SHOP_API_VERSION "1.1.0"

#if AMXX_VERSION_NUM >= 175
	#pragma reqlib amxx_shop
	#if !defined AMXMODX_NOAUTOLOAD
		#pragma loadlib amxx_shop
	#endif
#else
	#pragma library amxx_shop
#endif

#define RETURN_SHOP_DISCOUNT(%0) return %0
const SHOP_RESPONSE_CANCEL = 1;
const SHOP_RESPONSE_IGNORED = 2;

enum ItemProps {
	ItemName,
	ItemPrice,
	ItemDuration,
	ItemAccess,
	ItemVisibility,
	ItemHandler
};

enum ShopEvents {
	EventBuy,
	EventTimeStart,
	EventTimeThink,
	EventTimePassed,
	EventNotEnoughMoney
};

enum VisibleStates {
	VISIBLE_DEFAULT,
	VISIBLE_ENABLED,
	VISIBLE_DISABLED
};

/**
 * Изменение названия меню.
 *
 * @param title		Новое название.
 * @return			Ничего не возвращает.
 */
native shop_set_title(title[], ...);

/**
 * Зарегистрировать событие открытия меню.
 *
 * @param title		Новое название.
 * @return			Ничего не возвращает.
 */
native shop_register_openmenu(handler[]);

/**
 * Создание нового предмета в магазине.
 *
 * @param name		Название предмета.
 * @param price		Цена предмета.
 * @param save		Сохранять ли предмет в инвентарь до его ручного удаления через натив.
 * @param duration	Ограничение в секундах или 0.
 * @param access	Флаг доступа к предмету или -1 для всех.
 * @param visible	Видимость по умолчанию (показывать ли предмет в магазине).
 * @param handler	Функция обработчик.
 * @return			Возвращает индекс предмета или -1 при неудаче.
 *
 * @пример обработчика: function(const this, const ShopEvents: event, const ShopItem: item, const itemname[], const price, const duration, const access, const durationleft)
 * @param this		Индекс игрока.
 * @param event		Событие.
 * @param name		Название предмета.
 * @param price		Цена предмета.
 * @param duration	Ограничение в секундах или 0.
 * @param access	Флаг доступа или -1 для всех.
 * @param durationleft Оставшееся время для предмета.
 */
native ShopItem: shop_push_item(name[], price, bool: save = false, duration = 0, access = -1, bool: visible = true, const handler[] = "");

/**
 * Удаление предмета.
 *
 * @param item		Индекс предмета.
 * @return			1/0.
 */
 native shop_remove_item(ShopItem: item);
 
/**
 * Изменение свойств предмета.
 *
 * @param item		Индекс предмета.
 * @param prop		Необходимое свойство (смотрим enum ItemProps).
 * @...				Значение свойства (строка или число,
 *					в зависимости от выбранного свойства).
 * @return			1/0.
 */
native shop_set_prop(ShopItem: item, ItemProps: prop, ...);

/**
 * Установка видимости предмета в магазине у опр. игрока
 *
 * @param this		Индекс предмета.
 * @param item 		Индекс предмета.
 * @param visible	Видимость предмета.
 * @return 			1/0. 
 *
 */
native shop_set_user_visible(this, ShopItem: item, VisibleStates: visible);

/**
 * Вернет состояние видимости у игрока
 *
 * @param this		Индекс предмета.
 * @param item 		Индекс предмета.
 * @return 			1/0. 
 *
 */
native VisibleStates: shop_get_user_visible(this, ShopItem: item);

 /**
 * Удаление предмета из инвентаря игрока.
 *
 * @param this		Индекс игрока.
 * @param item		Индекс предмета.
 * @return			1/0.
 */
 native shop_user_remove_item(this, ShopItem: item);
 
/**
 * Проверка на присутствие указанного предмета у игрока.
 *
 * @param this		Индекс игрока.
 * @param item		Индекс предмета.
 * @return			1/0.
 */
native shop_has_user_item(this, ShopItem: item);