-----------------------------------
-- xi.effect.DARK_ARTS
-----------------------------------
---@type TEffect
local effectObject = {}

effectObject.onEffectGain = function(target, effect)
    if target:getObjType() ~= xi.objType.TRUST then -- account for trusts
        target:recalculateAbilitiesTable()
    end

    local bonus = effect:getPower()
    local helix = effect:getSubPower()

    target:addMod(xi.mod.BLACK_MAGIC_COST, -bonus)
    target:addMod(xi.mod.BLACK_MAGIC_CAST, -bonus)
    target:addMod(xi.mod.BLACK_MAGIC_RECAST, -bonus)

    if not (target:hasStatusEffect(xi.effect.TABULA_RASA)) then
        target:addMod(xi.mod.BLACK_MAGIC_COST, -10)
        target:addMod(xi.mod.BLACK_MAGIC_CAST, -10)
        target:addMod(xi.mod.BLACK_MAGIC_RECAST, -10)
        target:addMod(xi.mod.WHITE_MAGIC_COST, 20)
        target:addMod(xi.mod.WHITE_MAGIC_CAST, 20)
        target:addMod(xi.mod.WHITE_MAGIC_RECAST, 20)
        target:addMod(xi.mod.HELIX_EFFECT, helix)
        target:addMod(xi.mod.HELIX_DURATION, 72)
    end

    if target:getObjType() ~= xi.objType.TRUST then
        target:recalculateSkillsTable()
    else -- account for trusts
        local rankD = target:getSkillLevel(xi.skill.ENFEEBLING_MAGIC)
        local artsRank = target:getMaxSkillLevel(target:getMainLvl(), xi.job.RDM, xi.skill.ENHANCING_MAGIC)
        local trustArts = artsRank - rankD

        -- TODO: update charutils to work with Trusts
        target:addMod(xi.mod.MACC, trustArts)
        -- cheats in MACC since Skill MODs aren't processed outside of charutils
    end
end

effectObject.onEffectTick = function(target, effect)
end

effectObject.onEffectLose = function(target, effect)
    if target:getObjType() ~= xi.objType.TRUST then -- account for trusts
        target:recalculateAbilitiesTable()
    end

    local bonus = effect:getPower()
    local helix = effect:getSubPower()

    target:delMod(xi.mod.BLACK_MAGIC_COST, -bonus)
    target:delMod(xi.mod.BLACK_MAGIC_CAST, -bonus)
    target:delMod(xi.mod.BLACK_MAGIC_RECAST, -bonus)

    if not (target:hasStatusEffect(xi.effect.TABULA_RASA)) then
        target:delMod(xi.mod.BLACK_MAGIC_COST, -10)
        target:delMod(xi.mod.BLACK_MAGIC_CAST, -10)
        target:delMod(xi.mod.BLACK_MAGIC_RECAST, -10)
        target:delMod(xi.mod.WHITE_MAGIC_COST, 20)
        target:delMod(xi.mod.WHITE_MAGIC_CAST, 20)
        target:delMod(xi.mod.WHITE_MAGIC_RECAST, 20)
        target:delMod(xi.mod.HELIX_EFFECT, helix)
        target:delMod(xi.mod.HELIX_DURATION, 72)
    end

    if target:getObjType() ~= xi.objType.TRUST then -- account for trusts
        target:recalculateSkillsTable()
    else
        local rankD = target:getSkillLevel(xi.skill.ENFEEBLING_MAGIC)
        local artsRank = target:getMaxSkillLevel(target:getMainLvl(), xi.job.RDM, xi.skill.ENHANCING_MAGIC)
        local trustArts = artsRank - rankD

        -- TODO: update charutils to work with Trusts
        target:delMod(xi.mod.MACC, trustArts)
        -- cheats out MACC since Skill MODs aren't processed outside of charutils
    end
end

return effectObject
