--LOOT_READY MERCHANT_SHOW QUEST_POI_UPDATE QUEST_DETAIL QUEST_COMPLETE QUEST_GREETING QUEST_PROGRESS GOSSIP_SHOW SCRAPPING_MACHINE_SHOW MERCHANT_CLOSED EQUIP_BIND_CONFIRM
function(e)
    local aura_env = aura_env
    if e == "LOOT_READY" then --Auto Loot
        local slot = 1
        local lootinfo = GetLootInfo()
        for k, v in pairs(lootinfo) do
            if v.locked == false then
                local link = GetLootSlotLink(slot)
                local looted = false
                if not link then link = GetLootSlotLink(slot) end
                if v.item:match("%d* Gold") or v.item:match("%d* Silver") or v.item:match("%d* Copper") then LootSlot(slot); print("|cff78cb00loot 1 |r", v.item, type, subtype)
                elseif link:match("Azerite") then LootSlot(slot); print("|cff78cb00loot 2 |r", v.item, type, subtype)
                elseif v.item:match("War Resources") then LootSlot(slot); print("|cff78cb00loot 3 |r", v.item, type, subtype)
                elseif v.item:match("Residuum") then LootSlot(slot); print("|cff78cb00loot 4 |r", v.item, type, subtype)
                elseif v.item:match("Manapearl") then LootSlot(slot); print("|cff78cb00loot 5 |r", v.item, type, subtype)
                end
                if link then
                    local icon = v.texture
                    local id = link:match("item:(%d+):")
                    if not WeakAurasSaved.CustomTrash.IconDatabase[v.item] and v.item and icon then WeakAurasSaved.CustomTrash.IconDatabase[v.item] = icon; print("Adding|cff78cb00 ", v.item, " |rto the icon database") end
                    if not WeakAurasSaved.CustomTrash.IDDatabase[v.item] and v.item and id then WeakAurasSaved.CustomTrash.IDDatabase[v.item] = id; print("Adding|cff3366ff ", v.item, " |rto the id database") end
                    local type = select(6, GetItemInfo(link)) or ""
                    local subtype = select(7, GetItemInfo(link)) or ""
                    local ilvl = select(4, GetItemInfo(link)) or 0
                    local equip = select(9, GetItemInfo(link))
                    if (select(7, GetItemInfo(link)) or 0) == "Mount" then LootSlot(slot); print("|cff78cb00loot 6 |r", v.item, type, subtype)
                    elseif ilvl > 390 then LootSlot(slot); print("|cff78cb00loot 7 |r", v.item, type, subtype)
                    elseif (select(7, GetItemInfo(link)) or 0) == "Herb" then LootSlot(slot); print("|cff78cb00loot 8 |r", v.item, type, subtype)
                    elseif (select(7, GetItemInfo(link)) or 0) == "Cooking" then LootSlot(slot); print("|cff78cb00loot 9 |r", v.item, type, subtype)
                    elseif (select(7, GetItemInfo(link)) or 0) == "Cloth" and type == "Tradeskill" then LootSlot(slot); print("|cff78cb00loot 10 |r", v.item, type, subtype)
                    elseif (select(7, GetItemInfo(link)) or 0) == "Metal & Stone" then LootSlot(slot); print("|cff78cb00loot 11 |r", v.item, type, subtype)
                    elseif (select(11, GetItemInfo(link)) or 0) > 150000 and v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 12 |r", v.item, type, subtype)
                    elseif v.quality > 1 and v.quality < 4 and type ~= "Weapon" and type ~= "Armor" then LootSlot(slot); print("|cff78cb00loot 13 |r", v.item, type, subtype)
                    elseif v.isQuestItem == true then LootSlot(slot); print("|cff78cb00loot 14 |r", v.item, type, subtype)
                    elseif v.quality == 0 then LootSlot(slot); print("|cff78cb00loot 15 |r", v.item, type, subtype)
                    elseif aura_env.whitelist[v.item] then LootSlot(slot); print("|cff78cb00loot 16 |r", v.item, type, subtype)
                        --elseif type == "Quest" and subtype == "Quest" then      LootSlot(slot); print("|cff78cb00loot 17 |r", v.item, type, subtype)
                    else
                        print(type, subtype)
                        if type == "Weapon" or type == "Armor" then
                            if aura_env.skills[select(3, UnitClass("player"))][subtype] == 1 then
                                LootSlot(slot); print("|cff78cb00loot 18 |r", v.item, type, subtype)
                            elseif equip == "INVTYPE_FINGER" or equip == "INVTYPE_TRINKET" or equip == "INVTYPE_CLOAK" or equip == "INVTYPE_NECK" then
                                LootSlot(slot); print("|cff78cb00loot 19 |r", v.item, type, subtype)
                            end
                        elseif type == "Miscellaneous" then
                            if subtype == "Mount" then
                                LootSlot(slot); print("|cff78cb00loot 20 |r", v.item, type, subtype)
                            end
                        end
                    end
                end
                if link then WeakAuras.ScanEvents("ADD_ITEM_SHOW", link, v.quantity, looted) end
                slot = slot + 1
            end
        end
        CloseLoot()
    elseif e == "EQUIP_BIND_CONFIRM" then
        StaticPopup1Button1:Click()
    elseif e == "SCRAPPING_MACHINE_SHOW" then
        for i = 0, 4 do
            for j = 1, GetContainerNumSlots(i) do
                local link = select(7, GetContainerItemInfo(i, j))
                if link then
                    local name = GetItemInfo(link)
                    local rarity = select(3, GetItemInfo(link))
                    local ilvl = select(4, GetItemInfo(link)) or 0
                    local type = select(6, GetItemInfo(link))
                    local equip = select(9, GetItemInfo(link)) or ""
                    local price = select(11, GetItemInfo(link))
                    if aura_env.sellWhitelist[name] ~= 1 then
                        if name and rarity and ilvl and type and equip and price then
                            if (type == "Armor" or type == "Weapon") and rarity <= 3 and aura_env.getequipID(equip) then
                                UseContainerItem(i, j)
                            elseif rarity > 3 and aura_env.getequipID(equip) then
                                if equip ~= "INVTYPE_FINGER" then
                                    local eqID = aura_env.getequipID(equip)
                                    local elink = GetInventoryItemLink("player", eqID)
                                    local eilvl = select(4, GetItemInfo(elink)) or 0
                                    if eilvl > ilvl + 5 then
                                        print("Scrapping " .. link .. "over |cFF780000" .. eilvl - ilvl .. "|r ilvl difference from " .. elink)
                                        UseContainerItem(i, j)
                                    end
                                elseif equip == "INVTYPE_FINGER" then
                                    local eqID1, eqID2 = 11, 12
                                    local elink1, elink2 = GetInventoryItemLink("player", eqID1), GetInventoryItemLink("player", eqID2)
                                    local eilvl1, eilvl2 = select(4, GetItemInfo(elink1)) or 0, select(4, GetItemInfo(elink2)) or 0
                                    if eilvl1 > ilvl + 5 then
                                        print("Scrapping " .. link .. " over |cFF780000" .. eilvl1 - ilvl .. "|r ilvl difference from " .. elink1)
                                        UseContainerItem(i, j)
                                    elseif eilvl2 > ilvl + 5 then
                                        print("Scrapping " .. link .. " over |cFF780000" .. eilvl2 - ilvl .. "|r ilvl difference from " .. elink2)
                                        UseContainerItem(i, j)
                                    end
                                end
                            end
                        end
                    end
                end
            end
        end
    elseif e == "MERCHANT_SHOW" then --Sell grey and white wepaon
        if CanMerchantRepair() == true then RepairAllItems() end
        local i, j = 0, 1
        for c = 0, 4 do
            for s = 1, GetContainerNumSlots(c) do
                local link = select(7, GetContainerItemInfo(c, s))
                if link then
                    local name = GetItemInfo(link)
                    local rarity = select(3, GetItemInfo(link))
                    local ilvl = select(4, GetItemInfo(link)) or 0
                    local type = select(6, GetItemInfo(link))
                    local price = select(11, GetItemInfo(link))
                    if price and price > 0 then
                        if aura_env.sellWhitelist[name] ~= 1 then
                            if rarity == 0 then
                                aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
                            elseif (type == "Armor" or type == "Weapon") and ilvl < 350 then
                                aura_env.toSell[#aura_env.toSell + 1] = {["c"] = c, ["s"] = s}
                            end
                        end
                    end
                end
            end
        end
        aura_env.ticker = C_Timer.NewTicker(0.15, function()
            if aura_env.toSell[1] then
                UseContainerItem(aura_env.toSell[1].c, aura_env.toSell[1].s)
                table.remove(aura_env.toSell, 1)
            else
                aura_env.ticker:Cancel()
            end
            if j >= GetContainerNumSlots(i) then i = i + 1; j = 1 end
            if i >= 4 then aura_env.ticker:Cancel() end
        end)
    elseif e == "MERCHANT_CLOSED" then
        if aura_env.ticker then aura_env.ticker:Cancel() end
        aura_env.toSell = {}
    elseif e == "QUEST_POI_UPDATE" then
        CloseGossip()
    elseif e == "QUEST_DETAIL" then
        AcceptQuest()
    elseif e == "QUEST_COMPLETE" then
        if GetNumQuestChoices() <= 1 then
            GetQuestReward(1)
        end
    elseif e == "GOSSIP_SHOW" then
        local quests = GetNumGossipAvailableQuests()
        local complquests = GetNumGossipActiveQuests()
        local opt = GetNumGossipOptions()
        if complquests > 0 and opt == 0 then
            for i = 1, complquests do
                SelectGossipActiveQuest(i)
            end
        end
        if quests > 0 and opt == 0 then
            SelectGossipAvailableQuest(1)
        end
        if opt == 1 and quests + complquests == 0 then
            SelectGossipOption(1)
        end
    elseif e == "QUEST_GREETING" then
        local quests = GetNumGossipAvailableQuests()
        local complquests = GetNumGossipActiveQuests()
        if complquests > 0 then
            for i = 1, complquests do
                SelectActiveQuest(1)
            end
        end
        if quests > 0 then
            SelectAvailableQuest(1)
        end
    elseif e == "QUEST_PROGRESS" then
        if IsQuestCompletable(i) then
            CompleteQuest()
        end
    end
end

--INIT
aura_env.whitelist =
{
    ["Pygmy Suckerfish"] = 1,
    ["Drakkari Offerings"] = 1,
    ["Deepcoral Pod"] = 1,
    ["Hardened Spring"] = 1,
    ["Machined Gear Assembly"] = 1,
    ["Tempered Plating"] = 1,
    ["Hefty Glimmershell"] = 1,
    ["Fresh Meat"] = 1,
    ["Wood"] = 1,
}
aura_env.sellWhitelist =
{
    ["Blacksmith Hammer"] = 1,
    ["Endless Tincture of Renewed Combat"] = 1,
    ["Mr. Munchykins"] = 1,
}
aura_env.toSell = {}
aura_env.getequipID = function(equip)
    if equip == "INVTYPE_HEAD" then return 1
    elseif equip == "INVTYPE_NECK" then return 2
    elseif equip == "INVTYPE_SHOULDER" then return 3
    elseif equip == "INVTYPE_BODY" then return 4
    elseif equip == "INVTYPE_CHEST" or equip == "INVTYPE_ROBE" then return 5
    elseif equip == "INVTYPE_WAIST" then return 6
    elseif equip == "INVTYPE_LEGS" then return 7
    elseif equip == "INVTYPE_FEET" then return 8
    elseif equip == "INVTYPE_WRIST" then return 9
    elseif equip == "INVTYPE_HAND" then return 10
    elseif equip == "INVTYPE_CLOAK" then return 15
    elseif equip == "INVTYPE_WEAPON" or equip == "INVTYPE_WEAPONMAINHAND" or equip == "INVTYPE_2HWEAPON" then return 16
    elseif equip == "INVTYPE_SHIELD" then return 17
    else return nil end
end
aura_env.skills =
{
    --Warrior
    [1] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 1,
        ["Shields"] = 1,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 1,
        ["Bows"] = 1,
        ["Guns"] = 1,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 1,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 1,
        ["Warglaives"] = 1,
        ["Staves"] = 1,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 1,
        ["Crossbows"] = 1,
        ["Wands"] = 0,
    },
    --Paladin
    [2] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 1,
        ["Shields"] = 1,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 1,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 1,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 1,
        ["Warglaives"] = 0,
        ["Staves"] = 0,
        ["Fist Weapons"] = 0,
        ["Daggers"] = 0,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Hunter
    [3] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 0,
        ["Mail"] = 1,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 1,
        ["Bows"] = 1,
        ["Guns"] = 1,
        ["One-Handed Maces"] = 0,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 1,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 1,
        ["Crossbows"] = 1,
        ["Wands"] = 0,
    },
    --Rogue
    [4] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 1,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 0,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Priest
    [5] =
    {
        --Armor Skills
        ["Cloth"] = 1,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 0,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 0,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 0,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 1,
    },
    --Death Knight
    [6] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 1,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 1,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 1,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 1,
        ["Warglaives"] = 0,
        ["Staves"] = 0,
        ["Fist Weapons"] = 0,
        ["Daggers"] = 0,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Shaman
    [7] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 0,
        ["Mail"] = 1,
        ["Plate"] = 0,
        ["Shields"] = 1,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 0,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Mage
    [8] =
    {
        --Armor Skills
        ["Cloth"] = 1,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 0,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 0,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 0,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 1,
    },
    --Warlock
    [9] =
    {
        --Armor Skills
        ["Cloth"] = 1,
        ["Leather"] = 0,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 0,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 0,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 0,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 1,
    },
    --Monk
    [10] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 1,
        ["Mail"] = 0,
        ["Plate"] = 1,
        ["Shields"] = 1,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 0,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Druid
    [11] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 1,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 0,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 1,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 1,
        ["One-Handed Swords"] = 0,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 0,
        ["Staves"] = 1,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 1,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
    --Demon Hunter
    [12] =
    {
        --Armor Skills
        ["Cloth"] = 0,
        ["Leather"] = 1,
        ["Mail"] = 0,
        ["Plate"] = 0,
        ["Shields"] = 0,
        --Weapon Skills
        ["One-Handed Axes"] = 1,
        ["Two-Handed Axes"] = 0,
        ["Bows"] = 0,
        ["Guns"] = 0,
        ["One-Handed Maces"] = 0,
        ["Two-Handed Maces"] = 0,
        ["Polearms"] = 0,
        ["One-Handed Swords"] = 1,
        ["Two-Handed Swords"] = 0,
        ["Warglaives"] = 1,
        ["Staves"] = 0,
        ["Fist Weapons"] = 1,
        ["Daggers"] = 0,
        ["Crossbows"] = 0,
        ["Wands"] = 0,
    },
}
