local PSBT_Module   = PSBT_Module
local PSBT_Auras    = PSBT_Module:Subclass()
local CBM           = CALLBACK_MANAGER

local EFFECT_RESULT_FADED   = EFFECT_RESULT_FADED
local EFFECT_RESULT_GAINED  = EFFECT_RESULT_GAINED

local PSBT_EVENTS   = PSBT_EVENTS
local PSBT_AREAS    = PSBT_AREAS
local PSBT_MODULES  = PSBT_MODULES

function PSBT_Auras:Initialize( ... )
    PSBT_Module.Initialize( self, ... )

    self:RegisterForEvent( EVENT_EFFECT_CHANGED, function( eventCode, ... ) self:OnEffectChanged( ... ) end )
end

function PSBT_Auras:OnEffectChanged( changeType, effectSlot, effectName, unitTag, beginTime, endTime, stackCount, iconName, buffType, effectType, abilityType, statusEffectType )
    if ( unitTag ~= 'player' ) then
        return
    end

    print( 'OnEffectChanged' )

    if ( changeType == EFFECT_RESULT_FADED ) then
        self:Remove( effectName, iconName )
    elseif ( changeType == EFFECT_RESULT_GAINED ) then
        self:Add( effectName, iconName )
    end
end

function PSBT_Auras:Add( name, iconName )
    self:NewEvent( PSBT_AREAS.NOTIFICATION, true, iconName, name .. ' Gained' )
end

function PSBT_Auras:Remove( name, iconName )
    self:NewEvent( PSBT_AREAS.NOTIFICATION, true, iconName, name .. ' Fades' )
end

CBM:RegisterCallback( PSBT_EVENTS.LOADED,
    function( psbt )
        psbt:RegisterModule( PSBT_MODULES.AURAS, PSBT_Auras:New( psbt ) )
    end)