-- ------------------------------------------------------------------------------ --
--                                TradeSkillMaster                                --
--                          https://tradeskillmaster.com                          --
--    All Rights Reserved - Detailed license information included with addon.     --
-- ------------------------------------------------------------------------------ --

local _, TSM = ...
local Sniper = TSM.Operations:NewPackage("Sniper")
local private = {}
local L = TSM.Include("Locale").GetTable()
local CustomPrice = TSM.Include("Service.CustomPrice")
local OPERATION_INFO = {
	belowPrice = { type = "string", default = "max(vendorsell, ifgt(DBRegionMarketAvg, 250000g, 0.8, ifgt(DBRegionMarketAvg, 100000g, 0.7, ifgt(DBRegionMarketAvg, 50000g, 0.6, ifgt(DBRegionMarketAvg, 25000g, 0.5, ifgt(DBRegionMarketAvg, 10000g, 0.4, ifgt(DBRegionMarketAvg, 5000g, 0.3, ifgt(DBRegionMarketAvg, 2000g, 0.2, ifgt(DBRegionMarketAvg, 1000g, 0.1, 0.05)))))))) * DBRegionMarketAvg)" },
}



-- ============================================================================
-- Module Functions
-- ============================================================================

function Sniper.OnInitialize()
	TSM.Operations.Register("Sniper", L["Sniper"], OPERATION_INFO, 1, private.GetOperationInfo)
end

function Sniper.IsOperationValid(itemString)
	local _, operationSettings = TSM.Operations.GetFirstOperationByItem("Sniper", itemString)
	if not operationSettings then
		return false
	end
	local isValid = CustomPrice.Validate(operationSettings.belowPrice)
	return isValid
end

function Sniper.HasOperation(itemString)
	itemString = TSM.Groups.TranslateItemString(itemString)
	return TSM.Operations.GetFirstOperationByItem("Sniper", itemString) and true or false
end

function Sniper.GetBelowPrice(itemString)
	itemString = TSM.Groups.TranslateItemString(itemString)
	local operationName, operationSettings = TSM.Operations.GetFirstOperationByItem("Sniper", itemString)
	if not operationName then
		return
	end
	return CustomPrice.GetValue(operationSettings.belowPrice, itemString)
end



-- ============================================================================
-- Private Helper Functions
-- ============================================================================

function private.GetOperationInfo(operationSettings)
	return L["Sniping items below a max price"]
end
