LeoAltholicChampionList = ZO_SortFilterList:Subclass()
function LeoAltholicChampionList:New(control)

    ZO_SortFilterList.InitializeSortFilterList(self, control)

    local sorterKeys =
    {
        ["name"] = {},
    }

    self.masterList = {}
    self.currentSortKey = "name"
    self.currentSortOrder = ZO_SORT_ORDER_UP
    ZO_ScrollList_AddDataType(self.list, 1, "LeoAltholicChampionListTemplate", 32, function(control, data) self:SetupEntry(control, data) end)

    self.sortFunction = function(listEntry1, listEntry2)
        return ZO_TableOrderingFunction(listEntry1.data, listEntry2.data, self.currentSortKey, sorterKeys, self.currentSortOrder)
    end

    return self
end

function LeoAltholicChampionList:SetupEntry(control, data)
    control.data = data

    control.name = GetControl(control, "Name")
    control.name:SetText(data.name)

    local icons = {
        [LeoAltholic.CHAMPION_WARFARE] = "champion_points_magicka_icon",
        [LeoAltholic.CHAMPION_FITNESS] = "champion_points_health_icon",
        [LeoAltholic.CHAMPION_CRAFT] = "champion_points_stamina_icon"
    }

    control.disc = {};
    for disciplineIndex = 1, GetNumChampionDisciplines() do
        local disciplineId = GetChampionDisciplineId(disciplineIndex)
        control.disc[disciplineIndex] = GetControl(control, "Disc" .. disciplineIndex)
        local total = data.champion[disciplineIndex].spent + data.champion[disciplineIndex].unspent
        local color = '|c'..LeoAltholic.color.hex.green
        if data.champion[disciplineIndex].unspent > 0 then
            color = '|c'..LeoAltholic.color.hex.red
        end
        control.disc[disciplineIndex]:SetText("|t24:24:esoui/art/tutorial/" .. icons[disciplineId] .. ".dds|t "..color .. data.champion[disciplineIndex].spent .. '/' .. total .. '|r    ')
        control.disc[disciplineIndex].champion = data.champion
        control.disc[disciplineIndex].attribute = disciplineIndex
    end

    ZO_SortFilterList.SetupRow(self, control, data)
end

function LeoAltholicChampionList:BuildMasterList()
    self.masterList = {}
    local list = LeoAltholic.ExportCharacters(true)
    for k, v in ipairs(list) do
        local data = {
            name = v.bio.name,
            champion = v.champion
        }
        data.queueIndex = k
        table.insert(self.masterList, data)
    end
end

function LeoAltholicChampionList:SortScrollList()
    local scrollData = ZO_ScrollList_GetDataList(self.list)
    table.sort(scrollData, self.sortFunction)
end

function LeoAltholicChampionList:FilterScrollList()
    local scrollData = ZO_ScrollList_GetDataList(self.list)
    ZO_ClearNumericallyIndexedTable(scrollData)
    for i = 1, #self.masterList do
        local data = self.masterList[i]
        table.insert(scrollData, ZO_ScrollList_CreateDataEntry(1, data))
    end
end

local function addLine(tooltip, text, color)
    if not color then color = ZO_TOOLTIP_DEFAULT_COLOR end
    local r, g, b = color:UnpackRGB()
    tooltip:AddLine(text, "", r, g, b, CENTER, MODIFY_TEXT_TYPE_NONE, TEXT_ALIGN_LEFT, true)
end

local function addLineTitle(tooltip, text, color)
    if not color then color = ZO_SELECTED_TEXT end
    local r, g, b = color:UnpackRGB()
    tooltip:AddLine(text, "ZoFontHeader3", r, g, b, CENTER, MODIFY_TEXT_TYPE_NONE, TEXT_ALIGN_CENTER, true)
end

function LeoAltholicUI.TooltipChampionSkill(control, visible)

    local disciplineIndex = control.attribute
    local disciplineId = GetChampionDisciplineId(control.attribute)
    if visible then
        InitializeTooltip(InformationTooltip, control, LEFT, 5, 0)
        if control.champion[control.attribute] then
            addLineTitle(InformationTooltip, GetChampionDisciplineName(disciplineId).." "..control.champion[control.attribute].spent)
            for skill = 1, GetNumChampionDisciplineSkills(disciplineIndex) do
                local id = GetChampionSkillId(disciplineIndex, skill)
                local skillName = GetChampionSkillName(id)
                local points = 0
                if control.champion[control.attribute].skills[skill] then
                    points = control.champion[control.attribute].skills[skill]
                    if points > 0 then
                        addLine(InformationTooltip, "|c" ..LeoAltholic.color.hex.eso.. skillName .. "|r " .. points, ZO_SELECTED_TEXT)
                    end
                end
            end
        end
        InformationTooltip:SetHidden(false)
        InformationTooltipTopLevel:BringWindowToTop()
    else
        ClearTooltip(InformationTooltip)
        InformationTooltip:SetHidden(true)
    end
end