-- Midnight hero talent paths per Class|Spec (research).
-- Generated by expand-hero-paths.py - 2026-08-02
-- Re-proofed 2026-08-12 vs Wowhead live 12.1 + Raidbots subTreeNodes:
--   pairings unchanged (40/40); all 41 hero trees 0 name adds/deletes.
-- Sources: Warcraft Wiki Hero talent + Wowhead talentCalc + Raidbots live
local M = {}
local HERO_PATHS = {
  ["Death Knight|Blood"] = { "Deathbringer", "San'layn" },
  ["Death Knight|Frost"] = { "Riders of the Apocalypse", "Deathbringer" },
  ["Death Knight|Unholy"] = { "Riders of the Apocalypse", "San'layn" },
  ["Demon Hunter|Devourer"] = { "Annihilator", "Void-Scarred" },
  ["Demon Hunter|Havoc"] = { "Aldrachi Reaver", "Fel-Scarred" },
  ["Demon Hunter|Vengeance"] = { "Annihilator", "Aldrachi Reaver" },
  ["Druid|Balance"] = { "Elune's Chosen", "Keeper of the Grove" },
  ["Druid|Feral"] = { "Druid of the Claw", "Wildstalker" },
  ["Druid|Guardian"] = { "Elune's Chosen", "Druid of the Claw" },
  ["Druid|Restoration"] = { "Wildstalker", "Keeper of the Grove" },
  ["Evoker|Augmentation"] = { "Scalecommander", "Chronowarden" },
  ["Evoker|Devastation"] = { "Scalecommander", "Flameshaper" },
  ["Evoker|Preservation"] = { "Chronowarden", "Flameshaper" },
  ["Hunter|Beast Mastery"] = { "Pack Leader", "Dark Ranger" },
  ["Hunter|Marksmanship"] = { "Dark Ranger", "Sentinel" },
  ["Hunter|Survival"] = { "Pack Leader", "Sentinel" },
  ["Mage|Arcane"] = { "Spellslinger", "Sunfury" },
  ["Mage|Fire"] = { "Sunfury", "Frostfire" },
  ["Mage|Frost"] = { "Spellslinger", "Frostfire" },
  ["Monk|Brewmaster"] = { "Shado-Pan", "Master of Harmony" },
  ["Monk|Mistweaver"] = { "Conduit of the Celestials", "Master of Harmony" },
  ["Monk|Windwalker"] = { "Shado-Pan", "Conduit of the Celestials" },
  ["Paladin|Holy"] = { "Lightsmith", "Herald of the Sun" },
  ["Paladin|Protection"] = { "Lightsmith", "Templar" },
  ["Paladin|Retribution"] = { "Templar", "Herald of the Sun" },
  ["Priest|Discipline"] = { "Oracle", "Voidweaver" },
  ["Priest|Holy"] = { "Oracle", "Archon" },
  ["Priest|Shadow"] = { "Voidweaver", "Archon" },
  ["Rogue|Assassination"] = { "Fatebound", "Deathstalker" },
  ["Rogue|Outlaw"] = { "Trickster", "Fatebound" },
  ["Rogue|Subtlety"] = { "Trickster", "Deathstalker" },
  ["Shaman|Elemental"] = { "Stormbringer", "Farseer" },
  ["Shaman|Enhancement"] = { "Totemic", "Stormbringer" },
  ["Shaman|Restoration"] = { "Totemic", "Farseer" },
  ["Warlock|Affliction"] = { "Soul Harvester", "Hellcaller" },
  ["Warlock|Demonology"] = { "Soul Harvester", "Diabolist" },
  ["Warlock|Destruction"] = { "Hellcaller", "Diabolist" },
  ["Warrior|Arms"] = { "Slayer", "Colossus" },
  ["Warrior|Fury"] = { "Slayer", "Mountain Thane" },
  ["Warrior|Protection"] = { "Mountain Thane", "Colossus" },
}

local function trim(s)
  return (tostring(s or ""):gsub("^%s+", ""):gsub("%s+$", ""))
end

function M.ListHeroes(className, spec)
  local k = trim(className) .. "|" .. trim(spec)
  local list = HERO_PATHS[k]
  if list then
  local t = {}
  for i, h in ipairs(list) do t[i] = h end
  return t
  end
  local want = string.lower(k)
  for kk, vv in pairs(HERO_PATHS) do
  if string.lower(kk) == want then
  local t = {}
  for i, h in ipairs(vv) do t[i] = h end
  return t
  end
  end
  return {}
end

function M.DefaultHero(className, spec)
  local t = M.ListHeroes(className, spec)
  return t[1] or ""
end

M.HERO_PATHS = HERO_PATHS
M.patch = "Midnight 12.1"
SpellSmasherHeroPaths = M
return M

