local DEBUG =
-- function() end
d

local function _tr(str)
	return str
end

local TXT_NO_CARE
local TXT_NO_MARK
local TXT_ANY_MARK

local I_NO_CARE = -3
local I_NO_MARK = -2
local I_ANY_MARK = -1

local FCOISL = {}

local hasFCOIS = nil

InventoryManager.FCOISL = FCOISL

local DIList = nil
local DIChoices = nil

function FCOISL:hasAddon()
	if hasFCOIS ~= nil then return hasFCOIS end

	TXT_NO_CARE = GetString("IM_FCOIS_NOCAREMARK")
	TXT_NO_MARK = GetString("IM_FCOIS_NOMARK")
	TXT_ANY_MARK = GetString("IM_FCOIS_ANYMARK")

	hasFCOIS = ( FCOIS ~= nil and FCOIsMarked ~= nil and FCOGetDynamicInfo ~= nil and FCOGetIconText ~= nil)

	return hasFCOIS
end

function FCOISL:GetDynamicIconList()
	if DIList then return DIList end

	DIList = { }
	if not self:hasAddon() then return DIList end

	local totalNumberOfDynamicIcons, numberToDynamicIconNr = FCOGetDynamicInfo()
	for index, dynamicIconNr in pairs(numberToDynamicIconNr) do
        local dynIconName = FCOGetIconText(dynamicIconNr)
		DIList[#DIList + 1] = { dynamicIconNr, dynIconName }
		DIList[dynIconName] = dynamicIconNr
    end

	return DIList
end


function FCOISL:GetIndexedMark(mark)
	if mark == I_NO_MARK then return TXT_NO_MARK
	elseif mark == I_ANY_MARK then return TXT_ANY_MARK
	end

	return (FCOISL:hasAddon() and FCOGetIconText(mark)) or TXT_NO_CARE
end

function FCOISL:GetMarkIndex(markText)
	if not FCOISL:hasAddon() then return nil end

	if markText == TXT_NO_CARE then return nil
	elseif markText == TXT_NO_MARK then return I_NO_MARK
	elseif markText == TXT_ANY_MARK then return I_ANY_MARK
	else return DIList[markText]
	end
end

function FCOISL:GetDefaultMark() return I_NO_CARE end

function FCOISL:IsNoMark(mark) return mark == I_NO_MARK end

function FCOISL:IsAnyMark(mark) return mark == I_ANY_MARK end

function FCOISL:GetDynamicIconChoices()
	if DIChoices then return DIChoices end

	DIChoices = { TXT_NO_CARE, TXT_NO_MARK, TXT_ANY_MARK }
	if not self:hasAddon() then return DIChoices end

	local totalNumberOfDynamicIcons, numberToDynamicIconNr = FCOGetDynamicInfo()
	for index, dynamicIconNr in pairs(numberToDynamicIconNr) do
        local dynIconName = FCOGetIconText(dynamicIconNr)
		DIChoices[#DIChoices + 1] = dynIconName
    end

	return DIChoices
end

function FCOISL:FitMark(instanceId, mark)
	-- If we have switched off this addon, render this filter setting as irrelevant
	if not FCOISL:hasAddon() then return true end

	if not mark then return true end

	if mark == I_NO_MARK then return not FCOISL:HasMark(instanceId, nil)
	elseif mark == I_ANY_MARK then return FCOISL:HasMark(instanceId, nil)
	end

	return FCOISL:HasMark(instanceId, mark)
end

function FCOISL:HasMark(instanceId, mark)
	local _tab = self:GetDynamicIconList()

	if mark then
		return FCOIsMarked(instanceId, mark)
	end

	for i = 1, #_tab, 1 do
		if FCOIsMarked(instanceId, _tab[i][1]) then return true end
	end

	return false
end