-- DynamicTooltips: Warlock Spell Data (Classic/TBC)
-- TBC Spell Coefficients for Warlock class
-- Training levels sourced from TBC Classic Wowhead

local _, DT = ...
DT.ClassData = DT.ClassData or {}

-- Skip Classic data on Retail
if DT.isRetail then return end

DT.ClassData.Warlock = {
    -- ========================================================================
    -- SHADOW BOLT - All Ranks (sp=0.857, Shadow, Direct)
    -- ========================================================================
    [686] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 1, rank = 1, maxRank = 11 },
    [695] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 6, rank = 2, maxRank = 11 },
    [705] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 12, rank = 3, maxRank = 11 },
    [1088] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 20, rank = 4, maxRank = 11 },
    [1106] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 28, rank = 5, maxRank = 11 },
    [7641] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 36, rank = 6, maxRank = 11 },
    [11659] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 44, rank = 7, maxRank = 11 },
    [11660] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 52, rank = 8, maxRank = 11 },
    [11661] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 60, rank = 9, maxRank = 11 },
    [25307] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 60, rank = 10, maxRank = 11 },
    [27209] = { name = "Shadow Bolt", sp = 0.857, school = "Shadow", type = "Direct", level = 69, rank = 11, maxRank = 11 },

    -- ========================================================================
    -- IMMOLATE - All Ranks (sp=0.2 direct + 0.65 DoT, Fire)
    -- ========================================================================
    [348] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 1, rank = 1, maxRank = 9 },
    [707] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 10, rank = 2, maxRank = 9 },
    [1094] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 20, rank = 3, maxRank = 9 },
    [2941] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 30, rank = 4, maxRank = 9 },
    [11665] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 40, rank = 5, maxRank = 9 },
    [11667] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 50, rank = 6, maxRank = 9 },
    [11668] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 60, rank = 7, maxRank = 9 },
    [25309] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 60, rank = 8, maxRank = 9 },
    [27215] = { name = "Immolate", sp = 0.2, school = "Fire", type = "Direct", dotSp = 0.65, duration = 15, level = 69, rank = 9, maxRank = 9 },

    -- ========================================================================
    -- CORRUPTION - All Ranks (sp=0.936, Shadow, DoT)
    -- ========================================================================
    [172] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 4, rank = 1, maxRank = 8 },
    [6222] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 14, rank = 2, maxRank = 8 },
    [6223] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 24, rank = 3, maxRank = 8 },
    [7648] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 34, rank = 4, maxRank = 8 },
    [11671] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 44, rank = 5, maxRank = 8 },
    [11672] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 54, rank = 6, maxRank = 8 },
    [25311] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 60, rank = 7, maxRank = 8 },
    [27216] = { name = "Corruption", sp = 0.936, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 65, rank = 8, maxRank = 8 },

    -- ========================================================================
    -- CURSE OF AGONY - All Ranks (sp=1.2, Shadow, DoT 24s)
    -- ========================================================================
    [980] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 8, rank = 1, maxRank = 7 },
    [1014] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 18, rank = 2, maxRank = 7 },
    [6217] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 28, rank = 3, maxRank = 7 },
    [11711] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 38, rank = 4, maxRank = 7 },
    [11712] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 48, rank = 5, maxRank = 7 },
    [11713] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 58, rank = 6, maxRank = 7 },
    [27218] = { name = "Curse of Agony", sp = 1.2, school = "Shadow", type = "DoT", duration = 24, ticks = 12, level = 67, rank = 7, maxRank = 7 },

    -- ========================================================================
    -- CURSE OF DOOM - All Ranks (sp=2.0, Shadow, DoT 60s)
    -- ========================================================================
    [603] = { name = "Curse of Doom", sp = 2.0, school = "Shadow", type = "DoT", duration = 60, level = 60, rank = 1, maxRank = 2 },
    [30910] = { name = "Curse of Doom", sp = 2.0, school = "Shadow", type = "DoT", duration = 60, level = 70, rank = 2, maxRank = 2 },

    -- ========================================================================
    -- SEARING PAIN - All Ranks (sp=0.429, Fire, Direct)
    -- ========================================================================
    [5676] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 18, rank = 1, maxRank = 8 },
    [17919] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 26, rank = 2, maxRank = 8 },
    [17920] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 34, rank = 3, maxRank = 8 },
    [17921] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 42, rank = 4, maxRank = 8 },
    [17922] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 50, rank = 5, maxRank = 8 },
    [17923] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 58, rank = 6, maxRank = 8 },
    [27210] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 65, rank = 7, maxRank = 8 },
    [30459] = { name = "Searing Pain", sp = 0.429, school = "Fire", type = "Direct", level = 70, rank = 8, maxRank = 8 },

    -- ========================================================================
    -- SOUL FIRE - All Ranks (sp=1.15, Fire, Direct)
    -- ========================================================================
    [6353] = { name = "Soul Fire", sp = 1.15, school = "Fire", type = "Direct", level = 48, rank = 1, maxRank = 4 },
    [17924] = { name = "Soul Fire", sp = 1.15, school = "Fire", type = "Direct", level = 56, rank = 2, maxRank = 4 },
    [27211] = { name = "Soul Fire", sp = 1.15, school = "Fire", type = "Direct", level = 64, rank = 3, maxRank = 4 },
    [30545] = { name = "Soul Fire", sp = 1.15, school = "Fire", type = "Direct", level = 70, rank = 4, maxRank = 4 },

    -- ========================================================================
    -- INCINERATE - All Ranks (sp=0.714, Fire, Direct, TBC)
    -- ========================================================================
    [29722] = { name = "Incinerate", sp = 0.714, school = "Fire", type = "Direct", level = 64, rank = 1, maxRank = 2 },
    [32231] = { name = "Incinerate", sp = 0.714, school = "Fire", type = "Direct", level = 70, rank = 2, maxRank = 2 },

    -- ========================================================================
    -- CONFLAGRATE - All Ranks (sp=0.714, Fire, Direct, Talent)
    -- ========================================================================
    [17962] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 40, rank = 1, maxRank = 6 },
    [18930] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 48, rank = 2, maxRank = 6 },
    [18931] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 54, rank = 3, maxRank = 6 },
    [18932] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 60, rank = 4, maxRank = 6 },
    [27266] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 65, rank = 5, maxRank = 6 },
    [30912] = { name = "Conflagrate", sp = 0.714, school = "Fire", type = "Direct", level = 70, rank = 6, maxRank = 6 },

    -- ========================================================================
    -- UNSTABLE AFFLICTION - All Ranks (sp=1.0, Shadow, DoT, Talent)
    -- ========================================================================
    [30108] = { name = "Unstable Affliction", sp = 1.0, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 50, rank = 1, maxRank = 3 },
    [30404] = { name = "Unstable Affliction", sp = 1.0, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 60, rank = 2, maxRank = 3 },
    [30405] = { name = "Unstable Affliction", sp = 1.0, school = "Shadow", type = "DoT", duration = 18, ticks = 6, level = 70, rank = 3, maxRank = 3 },

    -- ========================================================================
    -- SIPHON LIFE - All Ranks (sp=0.8, Shadow, DoT, Talent)
    -- Scales with Shadow Spell Power, heals caster for damage dealt
    -- ========================================================================
    [18265] = { name = "Siphon Life", sp = 0.8, school = "Shadow", type = "DoT", duration = 30, healsForDamage = true, level = 30, rank = 1, maxRank = 5 },
    [18879] = { name = "Siphon Life", sp = 0.8, school = "Shadow", type = "DoT", duration = 30, healsForDamage = true, level = 38, rank = 2, maxRank = 5 },
    [18880] = { name = "Siphon Life", sp = 0.8, school = "Shadow", type = "DoT", duration = 30, healsForDamage = true, level = 48, rank = 3, maxRank = 5 },
    [18881] = { name = "Siphon Life", sp = 0.8, school = "Shadow", type = "DoT", duration = 30, healsForDamage = true, level = 58, rank = 4, maxRank = 5 },
    [27264] = { name = "Siphon Life", sp = 0.8, school = "Shadow", type = "DoT", duration = 30, healsForDamage = true, level = 63, rank = 5, maxRank = 5 },

    -- ========================================================================
    -- SEED OF CORRUPTION (sp=0.214 DoT, explosion sp=0.286, Shadow)
    -- ========================================================================
    [27243] = { name = "Seed of Corruption", sp = 0.214, school = "Shadow", type = "DoT", level = 70, rank = 1, maxRank = 1 },
    [27285] = { name = "Seed of Corruption", sp = 0.286, school = "Shadow", type = "Direct", note = "Explosion", level = 70, rank = 1, maxRank = 1 },

    -- ========================================================================
    -- DEATH COIL - All Ranks (sp=0.429, Shadow, Direct)
    -- ========================================================================
    [6789] = { name = "Death Coil", sp = 0.429, school = "Shadow", type = "Direct", level = 42, rank = 1, maxRank = 4 },
    [17925] = { name = "Death Coil", sp = 0.429, school = "Shadow", type = "Direct", level = 50, rank = 2, maxRank = 4 },
    [17926] = { name = "Death Coil", sp = 0.429, school = "Shadow", type = "Direct", level = 58, rank = 3, maxRank = 4 },
    [27223] = { name = "Death Coil", sp = 0.429, school = "Shadow", type = "Direct", level = 68, rank = 4, maxRank = 4 },

    -- ========================================================================
    -- SHADOWBURN - All Ranks (sp=0.429, Shadow, Direct, Talent)
    -- ========================================================================
    [17877] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 20, rank = 1, maxRank = 8 },
    [18867] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 24, rank = 2, maxRank = 8 },
    [18868] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 32, rank = 3, maxRank = 8 },
    [18869] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 40, rank = 4, maxRank = 8 },
    [18870] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 48, rank = 5, maxRank = 8 },
    [18871] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 56, rank = 6, maxRank = 8 },
    [27263] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 63, rank = 7, maxRank = 8 },
    [30546] = { name = "Shadowburn", sp = 0.429, school = "Shadow", type = "Direct", level = 70, rank = 8, maxRank = 8 },

    -- ========================================================================
    -- SHADOWFURY - All Ranks (sp=0.195, Shadow, Direct, Talent)
    -- ========================================================================
    [30283] = { name = "Shadowfury", sp = 0.195, school = "Shadow", type = "Direct", isAoE = true, level = 50, rank = 1, maxRank = 3 },
    [30413] = { name = "Shadowfury", sp = 0.195, school = "Shadow", type = "Direct", isAoE = true, level = 60, rank = 2, maxRank = 3 },
    [30414] = { name = "Shadowfury", sp = 0.195, school = "Shadow", type = "Direct", isAoE = true, level = 70, rank = 3, maxRank = 3 },

    -- ========================================================================
    -- HELLFIRE - All Ranks (sp=0.286, Fire, Channel)
    -- ========================================================================
    [1949] = { name = "Hellfire", sp = 0.286, school = "Fire", type = "Channel", duration = 15, level = 30, rank = 1, maxRank = 4 },
    [11683] = { name = "Hellfire", sp = 0.286, school = "Fire", type = "Channel", duration = 15, level = 42, rank = 2, maxRank = 4 },
    [11684] = { name = "Hellfire", sp = 0.286, school = "Fire", type = "Channel", duration = 15, level = 54, rank = 3, maxRank = 4 },
    [27213] = { name = "Hellfire", sp = 0.286, school = "Fire", type = "Channel", duration = 15, level = 68, rank = 4, maxRank = 4 },

    -- ========================================================================
    -- RAIN OF FIRE - All Ranks (sp=0.143, Fire, Channel/DoT)
    -- ========================================================================
    [5740] = { name = "Rain of Fire", sp = 0.143, school = "Fire", type = "DoT", duration = 8, isAoE = true, level = 20, rank = 1, maxRank = 5 },
    [6219] = { name = "Rain of Fire", sp = 0.143, school = "Fire", type = "DoT", duration = 8, isAoE = true, level = 34, rank = 2, maxRank = 5 },
    [11677] = { name = "Rain of Fire", sp = 0.143, school = "Fire", type = "DoT", duration = 8, isAoE = true, level = 46, rank = 3, maxRank = 5 },
    [11678] = { name = "Rain of Fire", sp = 0.143, school = "Fire", type = "DoT", duration = 8, isAoE = true, level = 58, rank = 4, maxRank = 5 },
    [27212] = { name = "Rain of Fire", sp = 0.143, school = "Fire", type = "DoT", duration = 8, isAoE = true, level = 69, rank = 5, maxRank = 5 },

    -- ========================================================================
    -- DRAIN SOUL - All Ranks (sp=0.429, Shadow, Channel)
    -- ========================================================================
    [1120] = { name = "Drain Soul", sp = 0.429, school = "Shadow", type = "Channel", duration = 15, level = 10, rank = 1, maxRank = 5 },
    [8288] = { name = "Drain Soul", sp = 0.429, school = "Shadow", type = "Channel", duration = 15, level = 24, rank = 2, maxRank = 5 },
    [8289] = { name = "Drain Soul", sp = 0.429, school = "Shadow", type = "Channel", duration = 15, level = 38, rank = 3, maxRank = 5 },
    [11675] = { name = "Drain Soul", sp = 0.429, school = "Shadow", type = "Channel", duration = 15, level = 52, rank = 4, maxRank = 5 },
    [27217] = { name = "Drain Soul", sp = 0.429, school = "Shadow", type = "Channel", duration = 15, level = 67, rank = 5, maxRank = 5 },

    -- ========================================================================
    -- DRAIN LIFE - All Ranks (sp=0.714, Shadow, Channel)
    -- ========================================================================
    [689] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 14, rank = 1, maxRank = 8 },
    [699] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 22, rank = 2, maxRank = 8 },
    [709] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 30, rank = 3, maxRank = 8 },
    [7651] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 38, rank = 4, maxRank = 8 },
    [11699] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 46, rank = 5, maxRank = 8 },
    [11700] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 54, rank = 6, maxRank = 8 },
    [27219] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 62, rank = 7, maxRank = 8 },
    [27220] = { name = "Drain Life", sp = 0.714, school = "Shadow", type = "Channel", duration = 5, isHeal = true, level = 69, rank = 8, maxRank = 8 },

    -- ========================================================================
    -- DRAIN MANA - All Ranks (no SP coeff, Shadow, Channel)
    -- ========================================================================
    [5138] = { name = "Drain Mana", sp = 0, school = "Shadow", type = "Channel", level = 24, rank = 1, maxRank = 4 },
    [6226] = { name = "Drain Mana", sp = 0, school = "Shadow", type = "Channel", level = 34, rank = 2, maxRank = 4 },
    [11703] = { name = "Drain Mana", sp = 0, school = "Shadow", type = "Channel", level = 44, rank = 3, maxRank = 4 },
    [11704] = { name = "Drain Mana", sp = 0, school = "Shadow", type = "Channel", level = 54, rank = 4, maxRank = 4 },

    -- ========================================================================
    -- LIFE TAP - All Ranks (sp=0.8, Shadow)
    -- ========================================================================
    [1454] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 6, rank = 1, maxRank = 7 },
    [1455] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 16, rank = 2, maxRank = 7 },
    [1456] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 26, rank = 3, maxRank = 7 },
    [11687] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 36, rank = 4, maxRank = 7 },
    [11688] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 46, rank = 5, maxRank = 7 },
    [11689] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 56, rank = 6, maxRank = 7 },
    [27222] = { name = "Life Tap", sp = 0.8, school = "Shadow", type = "Ability", level = 68, rank = 7, maxRank = 7 },

    -- ========================================================================
    -- CURSES (No coefficient)
    -- ========================================================================
    [1714] = { name = "Curse of Tongues", sp = 0, type = "Debuff" },
    [702] = { name = "Curse of Weakness", sp = 0, type = "Debuff" },
    [1490] = { name = "Curse of the Elements", sp = 0, type = "Debuff" },
    [17862] = { name = "Curse of Shadow", sp = 0, type = "Debuff" },
    [704] = { name = "Curse of Recklessness", sp = 0, type = "Debuff" },
    [1108] = { name = "Curse of Exhaustion", sp = 0, type = "Debuff" },

    -- ========================================================================
    -- UTILITY & BUFFS
    -- ========================================================================
    [18220] = { name = "Dark Pact", sp = 0, type = "Ability" },
    [15286] = { name = "Vampiric Embrace", sp = 0, type = "Buff" },
    [710] = { name = "Banish", sp = 0, type = "CC" },
    [6215] = { name = "Fear", sp = 0, type = "CC" },
    [5484] = { name = "Howl of Terror", sp = 0, type = "CC" },
    [1098] = { name = "Enslave Demon", sp = 0, type = "CC" },
    [687] = { name = "Demon Skin", sp = 0, type = "Buff" },
    [706] = { name = "Demon Armor", sp = 0, type = "Buff" },
    [28176] = { name = "Fel Armor", sp = 0, type = "Buff" },
    [15473] = { name = "Shadowform", sp = 0, type = "Form" },
    [132] = { name = "Detect Invisibility", sp = 0, type = "Buff" },
    [29858] = { name = "Soulshatter", sp = 0, type = "Ability" },

    -- ========================================================================
    -- SUMMONS & CREATES
    -- ========================================================================
    [691] = { name = "Summon Felhunter", sp = 0, type = "Summon" },
    [697] = { name = "Summon Voidwalker", sp = 0, type = "Summon" },
    [688] = { name = "Summon Imp", sp = 0, type = "Summon" },
    [712] = { name = "Summon Succubus", sp = 0, type = "Summon" },
    [30146] = { name = "Summon Felguard", sp = 0, type = "Summon" },
    [698] = { name = "Ritual of Summoning", sp = 0, type = "Ability" },

    -- ========================================================================
    -- IMP ABILITIES
    -- ========================================================================
    -- FIREBOLT - All Ranks (sp=0.571 of pet SP, Fire, Direct)
    [3110]  = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 1, rank = 1, maxRank = 8 },
    [7799]  = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 8, rank = 2, maxRank = 8 },
    [7800]  = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 18, rank = 3, maxRank = 8 },
    [7801]  = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 28, rank = 4, maxRank = 8 },
    [7802]  = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 38, rank = 5, maxRank = 8 },
    [11762] = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 48, rank = 6, maxRank = 8 },
    [11763] = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 58, rank = 7, maxRank = 8 },
    [27267] = { name = "Firebolt", sp = 0.571, school = "Fire", type = "Direct", isPet = true, petName = "Imp", level = 68, rank = 8, maxRank = 8 },

    -- FIRE SHIELD - All Ranks (absorb/reactive damage)
    [2947]  = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 4, rank = 1, maxRank = 6 },
    [8316]  = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 14, rank = 2, maxRank = 6 },
    [8317]  = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 24, rank = 3, maxRank = 6 },
    [11770] = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 34, rank = 4, maxRank = 6 },
    [11771] = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 44, rank = 5, maxRank = 6 },
    [27269] = { name = "Fire Shield", sp = 0, school = "Fire", type = "Buff", isPet = true, petName = "Imp", level = 54, rank = 6, maxRank = 6 },

    -- BLOOD PACT - All Ranks (stamina buff, no SP coeff)
    [6307]  = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 4, rank = 1, maxRank = 6 },
    [7804]  = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 14, rank = 2, maxRank = 6 },
    [7805]  = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 26, rank = 3, maxRank = 6 },
    [11766] = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 38, rank = 4, maxRank = 6 },
    [11767] = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 50, rank = 5, maxRank = 6 },
    [27268] = { name = "Blood Pact", sp = 0, type = "Buff", isPet = true, petName = "Imp", level = 62, rank = 6, maxRank = 6 },

    -- PHASE SHIFT
    [4511] = { name = "Phase Shift", sp = 0, type = "Buff", isPet = true, petName = "Imp" },

    -- ========================================================================
    -- VOIDWALKER ABILITIES
    -- ========================================================================
    -- TORMENT - All Ranks (taunt, no damage coeff)
    [3716]  = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 10, rank = 1, maxRank = 7 },
    [7809]  = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 20, rank = 2, maxRank = 7 },
    [7810]  = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 30, rank = 3, maxRank = 7 },
    [7811]  = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 40, rank = 4, maxRank = 7 },
    [11774] = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 50, rank = 5, maxRank = 7 },
    [11775] = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 60, rank = 6, maxRank = 7 },
    [27270] = { name = "Torment", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 70, rank = 7, maxRank = 7 },

    -- CONSUME SHADOWS - All Ranks (self-heal, OOC only)
    [17767] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 16, rank = 1, maxRank = 7 },
    [17850] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 24, rank = 2, maxRank = 7 },
    [17851] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 32, rank = 3, maxRank = 7 },
    [17852] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 40, rank = 4, maxRank = 7 },
    [17853] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 48, rank = 5, maxRank = 7 },
    [17854] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 56, rank = 6, maxRank = 7 },
    [27272] = { name = "Consume Shadows", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", isHeal = true, level = 64, rank = 7, maxRank = 7 },

    -- SACRIFICE - All Ranks (shield on warlock based on VW remaining HP)
    [7812]  = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 16, rank = 1, maxRank = 7 },
    [19438] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 24, rank = 2, maxRank = 7 },
    [19440] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 32, rank = 3, maxRank = 7 },
    [19441] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 40, rank = 4, maxRank = 7 },
    [19442] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 48, rank = 5, maxRank = 7 },
    [19443] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 56, rank = 6, maxRank = 7 },
    [27273] = { name = "Sacrifice", sp = 0, type = "Shield", isPet = true, petName = "Voidwalker", level = 64, rank = 7, maxRank = 7 },

    -- SUFFERING - All Ranks (AoE taunt)
    [17735] = { name = "Suffering", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 24, rank = 1, maxRank = 5 },
    [17750] = { name = "Suffering", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 36, rank = 2, maxRank = 5 },
    [17751] = { name = "Suffering", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 48, rank = 3, maxRank = 5 },
    [17752] = { name = "Suffering", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 60, rank = 4, maxRank = 5 },
    [27271] = { name = "Suffering", sp = 0, type = "Ability", isPet = true, petName = "Voidwalker", level = 68, rank = 5, maxRank = 5 },

    -- ========================================================================
    -- SUCCUBUS ABILITIES
    -- ========================================================================
    -- LASH OF PAIN - All Ranks (sp=0.429 of pet SP, Shadow, Direct)
    [7814]  = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 20, rank = 1, maxRank = 7 },
    [7815]  = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 28, rank = 2, maxRank = 7 },
    [7816]  = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 36, rank = 3, maxRank = 7 },
    [11778] = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 44, rank = 4, maxRank = 7 },
    [11779] = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 52, rank = 5, maxRank = 7 },
    [11780] = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 60, rank = 6, maxRank = 7 },
    [27274] = { name = "Lash of Pain", sp = 0.429, school = "Shadow", type = "Direct", isPet = true, petName = "Succubus", level = 68, rank = 7, maxRank = 7 },

    -- SOOTHING KISS - All Ranks (threat reduction)
    [6360]  = { name = "Soothing Kiss", sp = 0, type = "Ability", isPet = true, petName = "Succubus", level = 22, rank = 1, maxRank = 5 },
    [7813]  = { name = "Soothing Kiss", sp = 0, type = "Ability", isPet = true, petName = "Succubus", level = 34, rank = 2, maxRank = 5 },
    [11784] = { name = "Soothing Kiss", sp = 0, type = "Ability", isPet = true, petName = "Succubus", level = 46, rank = 3, maxRank = 5 },
    [11785] = { name = "Soothing Kiss", sp = 0, type = "Ability", isPet = true, petName = "Succubus", level = 58, rank = 4, maxRank = 5 },
    [27275] = { name = "Soothing Kiss", sp = 0, type = "Ability", isPet = true, petName = "Succubus", level = 68, rank = 5, maxRank = 5 },

    -- SEDUCTION (CC)
    [6358] = { name = "Seduction", sp = 0, type = "CC", isPet = true, petName = "Succubus" },

    -- LESSER INVISIBILITY
    [7870] = { name = "Lesser Invisibility", sp = 0, type = "Buff", isPet = true, petName = "Succubus" },

    -- ========================================================================
    -- FELHUNTER ABILITIES
    -- ========================================================================
    -- DEVOUR MAGIC - All Ranks (dispel + self-heal)
    [19505] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 30, rank = 1, maxRank = 6 },
    [19731] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 38, rank = 2, maxRank = 6 },
    [19734] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 46, rank = 3, maxRank = 6 },
    [19736] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 54, rank = 4, maxRank = 6 },
    [27276] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 62, rank = 5, maxRank = 6 },
    [27277] = { name = "Devour Magic", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 68, rank = 6, maxRank = 6 },

    -- SPELL LOCK - All Ranks (interrupt + silence)
    [19244] = { name = "Spell Lock", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 36, rank = 1, maxRank = 2 },
    [19647] = { name = "Spell Lock", sp = 0, type = "Ability", isPet = true, petName = "Felhunter", level = 52, rank = 2, maxRank = 2 },

    -- TAINTED BLOOD - All Ranks (passive retaliatory damage)
    [19478] = { name = "Tainted Blood", sp = 0, type = "Buff", isPet = true, petName = "Felhunter", level = 32, rank = 1, maxRank = 5 },
    [19655] = { name = "Tainted Blood", sp = 0, type = "Buff", isPet = true, petName = "Felhunter", level = 40, rank = 2, maxRank = 5 },
    [19656] = { name = "Tainted Blood", sp = 0, type = "Buff", isPet = true, petName = "Felhunter", level = 48, rank = 3, maxRank = 5 },
    [19660] = { name = "Tainted Blood", sp = 0, type = "Buff", isPet = true, petName = "Felhunter", level = 56, rank = 4, maxRank = 5 },
    [27280] = { name = "Tainted Blood", sp = 0, type = "Buff", isPet = true, petName = "Felhunter", level = 64, rank = 5, maxRank = 5 },

    -- PARANOIA (passive stealth detection aura)
    [7841] = { name = "Paranoia", sp = 0, type = "Buff", isPet = true, petName = "Felhunter" },

    -- ========================================================================
    -- FELGUARD ABILITIES (TBC Demonology talent)
    -- ========================================================================
    -- CLEAVE - Uses pet melee damage + flat bonus, Physical
    [30213] = { name = "Cleave", sp = 0, wd = 1.0, school = "Physical", type = "PetMelee", isPet = true, petName = "Felguard", isAoE = true },

    -- INTERCEPT - Charge + stun + Physical damage
    [30151] = { name = "Intercept", sp = 0, wd = 0, school = "Physical", type = "PetMelee", isPet = true, petName = "Felguard" },

    -- ANGUISH - Taunt (threat, no damage)
    [33698] = { name = "Anguish", sp = 0, type = "Ability", isPet = true, petName = "Felguard", level = 50, rank = 1, maxRank = 3 },
    [33699] = { name = "Anguish", sp = 0, type = "Ability", isPet = true, petName = "Felguard", level = 60, rank = 2, maxRank = 3 },
    [33700] = { name = "Anguish", sp = 0, type = "Ability", isPet = true, petName = "Felguard", level = 70, rank = 3, maxRank = 3 },

    -- DEMONIC FRENZY (passive - stacking AP buff)
    [32851] = { name = "Demonic Frenzy", sp = 0, type = "Buff", isPet = true, petName = "Felguard" },

    -- AVOIDANCE (passive - AoE damage reduction)
    [32233] = { name = "Avoidance", sp = 0, type = "Buff", isPet = true, petName = "Felguard" },
}
