RandomRankedGuildMember = {}

RandomRankedGuildMember.name = "RandomRankedGuildMember"

RandomRankedGuildMember.last_chosen = nil

local function parseOptions (option)
    -- Taken from http://wiki.esoui.com/How_to_add_a_slash_command
    local options = {}
    local searchResult = { string.match(option,"^(%S*)%s*(.-)$") }
    for i,v in pairs(searchResult) do
        if (v ~= nil and v ~= "") then
            options[i] = string.lower(v)
        end
    end
    return options
end

function RandomRankedGuildMember.Choose(options)
    local options = parseOptions(options)

    if #options == 1 and options[1] == "last" then
        if RandomRankedGuildMember.last_chosen ~= nil then
            CHAT_SYSTEM:AddMessage("Previously chose " .. RandomRankedGuildMember.last_chosen .. ".")
        else
            CHAT_SYSTEM:AddMessage("No guild member chosen this session.")
        end
        return
    end

    if #options ~= 2 or options[1] == "help" then
        CHAT_SYSTEM:AddMessage("To use RandomRankGuildMember:")
        CHAT_SYSTEM:AddMessage("/rrm <guild id> <rank id> -- return random, online member from guild of specified rank")
        CHAT_SYSTEM:AddMessage("/rrm last -- return the last chosen person (including guild and rank)")
        CHAT_SYSTEM:AddMessage("/rrm help -- this message")
        return
    end

    local guild_id = tonumber(options[1])
    local rank_id = tonumber(options[2])

    local guild_name = GetGuildName(guild_id)
    local rank_name = GetFinalGuildRankName(guild_id, rank_id)

    if not guild_name then
        CHAT_SYSTEM:AddMessage("Invalid guild number: " .. guild_id .. ".")
        return
    end

    if not rank_name then
        CHAT_SYSTEM:AddMessage("Invalid rank_id for " .. guild_name .. ", " .. rank_id .. ".")
        return
    end

    local num_members = GetNumGuildMembers(guild_id)

    local pool = {}

    for i=1, num_members do
        local m_name, m_note, m_rank_ind, m_status, m_secs = GetGuildMemberInfo(guild_id, i)
        if m_secs == 0 and m_rank_ind == rank_id then
            table.insert(pool, m_name)
        end
    end

    if #pool == 0 then
        CHAT_SYSTEM:AddMessage("No eligible members found for " .. guild_name .. " ranked " .. rank_name .. ".")
        return
    else
        CHAT_SYSTEM:AddMessage(#pool .. " eligible member(s) found for " .. guild_name .. " ranked " .. rank_name .. "!")
    end

    local ind = math.random(1, #pool)
    RandomRankedGuildMember.last_chosen = pool[ind] .. " in " .. guild_name .. " (" .. rank_name .. ")"
    CHAT_SYSTEM:AddMessage("Randomly chose " .. RandomRankedGuildMember.last_chosen .. ".")
end

SLASH_COMMANDS["/rrm"] = RandomRankedGuildMember.Choose