local _, ESKP = ...

-- Catalogue expansion.  These are intentionally grouped by farming method so the
-- price-check layer can scan the exact item later without changing the guide UI.
local function add(id, kind, name, source, zone, difficulty, reset, marketable, value, chance, steps, itemID)
    table.insert(ESKP.Targets, {
        id = id, type = kind, name = name, itemID = itemID,
        source = source, zone = zone, difficulty = difficulty, reset = reset,
        marketable = marketable, value = value, chance = chance, steps = steps,
    })
end

local function craftedMount(id, name, itemID, profession, materials)
    add(id, "MOUNT", name, profession .. " crafted mount", "Auction House / profession hub", "Profession", "No reset", true,
        "Tradeable crafted mount", "Crafting recipe", {
            "Learn the required " .. profession .. " recipe or acquire the finished mount item.",
            "Gather or buy the required materials: " .. materials .. ".",
            "Craft the unbound mount item.",
            "Use it for your collection or list it on the Auction House." }, itemID)
end

-- 12 marketable/craftable mounts.
craftedMount("vial_of_the_sands", "Vial of the Sands", 65891, "Alchemy", "Volatiles, Pyrium-Laced Crystalline Vial, and Truegold")
craftedMount("mechano_hog", "Mechano-Hog", 41508, "Engineering", "Titansteel Bars, Arctic Fur, and vendor parts")
craftedMount("chopper", "Mekgineer's Chopper", 44413, "Engineering", "Titansteel Bars, Arctic Fur, and vendor parts")
craftedMount("sky_golem", "Sky Golem", 95416, "Engineering", "Jard's Peculiar Energy Sources and Living Steel")
craftedMount("depleted_kyparium", "Depleted-Kyparium Rocket", 87251, "Engineering", "Kyparium, Trillium, and Orb of Mystery")
craftedMount("world_spinner", "Geosynchronous World Spinner", 87250, "Engineering", "Kyparium, Trillium, and Orb of Mystery")
craftedMount("flying_machine", "Flying Machine", 34061, "Engineering", "Fel Iron, Adamantite, and Elemental materials")
craftedMount("turbo_flying_machine", "Turbo-Charged Flying Machine", 34060, "Engineering", "Khorium, Felsteel, and Elemental materials")
craftedMount("jade_panther", "Jade Panther", 83088, "Jewelcrafting", "Orb of Mystery and green gems")
craftedMount("sunstone_panther", "Sunstone Panther", 83087, "Jewelcrafting", "Orb of Mystery and yellow gems")
craftedMount("ruby_panther", "Ruby Panther", 83090, "Jewelcrafting", "Orb of Mystery and red gems")
craftedMount("sapphire_panther", "Sapphire Panther", 83089, "Jewelcrafting", "Orb of Mystery and blue gems")

-- Three additional collector-only mounts complete the eight prestige targets.
add("experiment_12b", "MOUNT", "Experiment 12-B", "Ultraxion — Dragon Soul", "Caverns of Time", "Legacy raid", "Weekly", false, "Prestige collector mount", "Rare boss drop", {
    "Travel to Dragon Soul through the Caverns of Time.", "Set an eligible legacy raid difficulty.", "Clear to and defeat Ultraxion.", "Loot the boss, then return after the weekly reset if needed." }, 78919)
add("blazing_drake", "MOUNT", "Blazing Drake", "Madness of Deathwing — Dragon Soul", "Caverns of Time", "Legacy raid", "Weekly", false, "Prestige collector mount", "Rare boss drop", {
    "Travel to Dragon Soul through the Caverns of Time.", "Clear the raid to Madness of Deathwing.", "Defeat and loot the final boss.", "Return after weekly reset if the mount does not drop." }, 77067)
add("life_binders_handmaiden", "MOUNT", "Life-Binder's Handmaiden", "Madness of Deathwing — Dragon Soul", "Caverns of Time", "Heroic legacy raid", "Weekly", false, "Prestige collector mount", "Rare boss drop", {
    "Travel to Dragon Soul through the Caverns of Time.", "Set the raid to Heroic difficulty.", "Clear to and defeat Madness of Deathwing.", "Loot the boss and repeat next reset if necessary." }, 77069)

local function rarePet(id, name, itemID, source, zone, steps)
    add(id, "PET", name, source, zone, "Open world / event", "No reset", true, "Cageable collector pet", "Rare drop or limited source", steps, itemID)
end

-- 28 additional cageable pets, bringing the pet catalogue to 30.
rarePet("azure_whelpling", "Azure Whelpling", 20749, "Azure Whelpling — world drop", "Azshara", {
    "Travel to Azshara.", "Farm eligible dragonkin in the zone.", "Loot the Tiny Azure Whelpling if it drops.", "Learn it or cage it to sell." })
rarePet("crimson_whelpling", "Crimson Whelpling", 8498, "Crimson Whelpling — world drop", "Wetlands", {
    "Travel to Wetlands.", "Farm eligible dragonkin in the zone.", "Loot the Tiny Crimson Whelpling if it drops.", "Learn it or cage it to sell." })
rarePet("emerald_whelpling", "Emerald Whelpling", 8499, "Emerald Whelpling — world drop", "Swamp of Sorrows", {
    "Travel to the Swamp of Sorrows.", "Farm eligible dragonkin in the zone.", "Loot the Tiny Emerald Whelpling if it drops.", "Learn it or cage it to sell." })
rarePet("bronze_whelpling", "Bronze Whelpling", 29960, "Bronze Whelpling — world drop", "Tanaris", {
    "Travel to Tanaris.", "Farm eligible dragonkin and humanoids in the zone.", "Loot the Tiny Bronze Whelpling if it drops.", "Learn it or cage it to sell." })
rarePet("black_tabby", "Black Tabby Cat", 8491, "Black Tabby — world drop", "Hillsbrad Foothills", {
    "Travel to Hillsbrad Foothills.", "Farm eligible humanoids in the zone.", "Loot the Cat Carrier (Black Tabby) if it drops.", "Learn it or cage it to sell." })
rarePet("disgusting_oozeling", "Disgusting Oozeling", 20769, "Oozing Bag — ooze and worm drops", "Legacy outdoor zones", {
    "Farm level-appropriate oozes, slimes, and worms.", "Loot Oozing Bags as they drop.", "Open the bags for a chance at the Disgusting Oozeling.", "Learn it or cage it to sell." })
rarePet("fox_kit", "Fox Kit", 21301, "Fox Kit — rare world drop", "Tol Barad Peninsula", {
    "Travel to Tol Barad Peninsula.", "Farm Foxes and other eligible beasts.", "Loot the Fox Kit if it drops.", "Learn it or cage it to sell." })
rarePet("darkmoon_eye", "Darkmoon Eye", 73903, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_monkey", "Darkmoon Monkey", 73797, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_dirigible", "Darkmoon Dirigible", 73909, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_cub", "Darkmoon Cub", 73905, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_tonk", "Darkmoon Tonk", 73904, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_balloon", "Darkmoon Balloon", 73799, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("darkmoon_turtle_tank", "Darkmoon Turtle Tank", 73798, "Darkmoon Game Prize", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Complete games and activities for Darkmoon Prize Tickets.", "Purchase or open the relevant prize source.", "Learn it or cage it to sell." })
rarePet("sea_pony", "Sea Pony", 67128, "Bag of Fishing Treasures", "Fishing pools", {
    "Fish from pools and open Bag of Fishing Treasures.", "Keep opening bags until the Sea Pony appears.", "Learn it or cage it to sell." })
rarePet("drowned_hatchling", "Drowned Hatchling", nil, "Mysterious Egg", "Nazjatar", {
    "Obtain Mysterious Eggs in Nazjatar.", "Complete the egg's associated incubation requirement.", "Open the egg reward and learn or cage the pet." })
rarePet("darkmoon_rabbit", "Darkmoon Rabbit", nil, "Darkmoon Rabbit — rare spawn", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Find and defeat the Darkmoon Rabbit rare.", "Loot the pet if it drops.", "Learn it or cage it to sell." })
rarePet("darkmoon_zeppelin", "Darkmoon Zeppelin", nil, "Lhara — Darkmoon vendor", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Earn Darkmoon Prize Tickets.", "Buy the Darkmoon Zeppelin from Lhara.", "Learn it or cage it to sell." })
rarePet("gundrak_hatchling", "Gundrak Hatchling", 29901, "Gundrak Raptor Egg", "Zul'Drak", {
    "Travel to Zul'Drak.", "Farm for Gundrak Raptor Eggs from the appropriate raptors.", "Open eggs until the hatchling appears.", "Learn it or cage it to sell." })
rarePet("proto_drake_whelp", "Proto-Drake Whelp", 44721, "Disgusting Jar", "Sholazar Basin", {
    "Travel to Sholazar Basin.", "Buy a Disgusting Jar from the vendor when available.", "Wait for the jar to mature, then open it.", "Learn the pet or cage it to sell." })
rarePet("phoenix_hatchling", "Phoenix Hatchling", 35504, "Kael'thas Sunstrider — Magisters' Terrace", "Isle of Quel'Danas", {
    "Travel to Magisters' Terrace on the Isle of Quel'Danas.", "Clear to and defeat Kael'thas Sunstrider.", "Loot the Phoenix Hatchling if it drops.", "Learn it or cage it to sell." })
rarePet("darkmoon_fairey_dragon", "Darkmoon Fairey Dragon", nil, "Darkmoon Prize Tickets", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Earn Darkmoon Prize Tickets through games and activities.", "Purchase the pet from the Faire vendor.", "Learn it or cage it to sell." })
rarePet("crimson_dredwing_pup", "Crimson Dredwing Pup", nil, "Crimson Dredwing — zone drop", "Revendreth", {
    "Travel to Revendreth.", "Farm eligible dredbats in the zone.", "Loot the Crimson Dredwing Pup if it drops.", "Learn it or cage it to sell." })
rarePet("unborn_valkyr", "Unborn Val'kyr", nil, "Wild battle pet", "Northrend", {
    "Search Northrend spawn points for the Unborn Val'kyr.", "Start a pet battle and capture one.", "Level it if desired, then cage it to sell." })
rarePet("snowy_owl", "Snowy Owl", nil, "Winter Veil vendor", "Orgrimmar / Ironforge", {
    "Visit the Winter Veil vendor during the holiday.", "Buy the pet while it is available.", "Learn it or cage it to sell." })
rarePet("winter_reindeer", "Winter Reindeer", nil, "Winter Veil vendor", "Orgrimmar / Ironforge", {
    "Visit the Winter Veil vendor during the holiday.", "Buy the pet while it is available.", "Learn it or cage it to sell." })
rarePet("darkmoon_dancing_bear", "Darkmoon Dancing Bear", nil, "Darkmoon Prize Tickets", "Darkmoon Island", {
    "Visit Darkmoon Island while the Faire is active.", "Earn Darkmoon Prize Tickets through games and activities.", "Purchase the pet from the Faire vendor.", "Learn it or cage it to sell." })
rarePet("deviate_hatchling", "Deviate Hatchling", 48114, "Deviate Fish cooking result", "The Barrens", {
    "Travel to the Barrens and fish for Deviate Fish.", "Cook Deviate Fish using the relevant recipe.", "Keep cooking until the Deviate Hatchling appears.", "Learn it or cage it to sell." })

local function transmog(id, name, source, zone, value, steps, itemID)
    add(id, "TRANSMOG", name, source, zone, "Open world / legacy farm", "No reset", true,
        value, "Rare Bind on Equip drop", steps, itemID)
end

local function classicWorldDrop(id, name, setName, zone, itemID)
    transmog(id, name, setName .. " — classic world drop", zone, "Sought-after classic transmog", {
        "Travel to " .. zone .. " and enable an appropriate legacy timeline if needed.",
        "Farm dense humanoid camps within the item's legacy level range.",
        "Loot the Bind on Equip item if it drops.",
        "Learn the appearance on an eligible character or list it on the Auction House." }, itemID)
end

-- 48 BoE transmog pursuits, bringing the transmog catalogue to 50.
classicWorldDrop("teebus_blazing_longsword", "Teebu's Blazing Longsword", "Rare weapon", "Burning Steppes / Eastern Plaguelands", 1728)
classicWorldDrop("blade_of_hanna", "Blade of Hanna", "Rare weapon", "Tanaris / Hinterlands", 2801)
classicWorldDrop("glorious_breastplate", "Glorious Breastplate", "Glorious set", "Silithus / Winterspring", 14924)
classicWorldDrop("glorious_belt", "Glorious Belt", "Glorious set", "Silithus / Winterspring", 14927)
classicWorldDrop("glorious_gauntlets", "Glorious Gauntlets", "Glorious set", "Silithus / Winterspring", 14926)
classicWorldDrop("glorious_sabatons", "Glorious Sabatons", "Glorious set", "Silithus / Winterspring", 14922)
classicWorldDrop("glorious_shoulder_pads", "Glorious Shoulder Pads", "Glorious set", "Silithus / Winterspring", 14929)
classicWorldDrop("jade_breastplate", "Jade Breastplate", "Jade set", "Un'Goro Crater / Blasted Lands", 14915)
classicWorldDrop("jade_legplates", "Jade Legplates", "Jade set", "Un'Goro Crater / Blasted Lands", 14920)
classicWorldDrop("jade_gauntlets", "Jade Gauntlets", "Jade set", "Un'Goro Crater / Blasted Lands", 14917)
classicWorldDrop("jade_belt", "Jade Belt", "Jade set", "Un'Goro Crater / Blasted Lands", 14918)
classicWorldDrop("jade_epaulets", "Jade Epaulets", "Jade set", "Un'Goro Crater / Blasted Lands", 14921)
classicWorldDrop("lofty_breastplate", "Lofty Breastplate", "Lofty set", "Western Plaguelands / Silithus", 14966)
classicWorldDrop("lofty_legguards", "Lofty Legguards", "Lofty set", "Western Plaguelands / Silithus", 14970)
classicWorldDrop("lofty_gauntlets", "Lofty Gauntlets", "Lofty set", "Western Plaguelands / Silithus", 14967)
classicWorldDrop("lofty_shield", "Lofty Shield", "Lofty set", "Western Plaguelands / Silithus", 14964)
classicWorldDrop("vanguard_breastplate", "Vanguard Breastplate", "Vanguard set", "Eastern Plaguelands / Winterspring", 14854)
classicWorldDrop("vanguard_legplates", "Vanguard Legplates", "Vanguard set", "Eastern Plaguelands / Winterspring", 14859)
classicWorldDrop("vanguard_gauntlets", "Vanguard Gauntlets", "Vanguard set", "Eastern Plaguelands / Winterspring", 14855)
classicWorldDrop("vanguard_pauldrons", "Vanguard Pauldrons", "Vanguard set", "Eastern Plaguelands / Winterspring", 14860)
classicWorldDrop("saltstone_helm", "Saltstone Helm", "Saltstone set", "Badlands / Searing Gorge", 14899)
classicWorldDrop("saltstone_legplates", "Saltstone Legplates", "Saltstone set", "Badlands / Searing Gorge", 14900)
classicWorldDrop("saltstone_gauntlets", "Saltstone Gauntlets", "Saltstone set", "Badlands / Searing Gorge", 14897)
classicWorldDrop("saltstone_shoulder_pads", "Saltstone Shoulder Pads", "Saltstone set", "Badlands / Searing Gorge", 14901)
classicWorldDrop("bloodscale_breastplate", "Bloodscale Breastplate", "Bloodscale set", "Felwood / Burning Steppes", 14821)
classicWorldDrop("bloodscale_legguards", "Bloodscale Legguards", "Bloodscale set", "Felwood / Burning Steppes", 14825)
classicWorldDrop("bloodscale_gauntlets", "Bloodscale Gauntlets", "Bloodscale set", "Felwood / Burning Steppes", 14823)
classicWorldDrop("bloodscale_pauldrons", "Bloodscale Pauldrons", "Bloodscale set", "Felwood / Burning Steppes", 14826)
classicWorldDrop("exalted_breastplate", "Exalted Breastplate", "Exalted set", "Winterspring / Eastern Plaguelands", 14948)
classicWorldDrop("exalted_legplates", "Exalted Legplates", "Exalted set", "Winterspring / Eastern Plaguelands", 14953)
classicWorldDrop("exalted_gauntlets", "Exalted Gauntlets", "Exalted set", "Winterspring / Eastern Plaguelands", 14949)
classicWorldDrop("exalted_shoulder_pads", "Exalted Shoulder Pads", "Exalted set", "Winterspring / Eastern Plaguelands", 14955)
classicWorldDrop("revenant_breastplate", "Revenant Breastplate", "Revenant set", "Western Plaguelands / Felwood", 10128)
classicWorldDrop("revenant_leggings", "Revenant Leggings", "Revenant set", "Western Plaguelands / Felwood", 10132)
classicWorldDrop("revenant_gauntlets", "Revenant Gauntlets", "Revenant set", "Western Plaguelands / Felwood", 10129)
classicWorldDrop("revenant_shoulder_blades", "Revenant Shoulder Blades", "Revenant set", "Western Plaguelands / Felwood", 10134)
classicWorldDrop("heroic_armor", "Heroic Armor", "Heroic set", "Eastern Plaguelands / Winterspring", 14931)
classicWorldDrop("heroic_legplates", "Heroic Legplates", "Heroic set", "Eastern Plaguelands / Winterspring", 14936)
classicWorldDrop("heroic_gauntlets", "Heroic Gauntlets", "Heroic set", "Eastern Plaguelands / Winterspring", 14932)
classicWorldDrop("heroic_pauldrons", "Heroic Pauldrons", "Heroic set", "Eastern Plaguelands / Winterspring", 14937)
classicWorldDrop("hyperion_armor", "Hyperion Armor", "Hyperion set", "Blasted Lands / Silithus", 10384)
classicWorldDrop("hyperion_legplates", "Hyperion Legplates", "Hyperion set", "Blasted Lands / Silithus", 10389)
classicWorldDrop("hyperion_gauntlets", "Hyperion Gauntlets", "Hyperion set", "Blasted Lands / Silithus", 10386)
classicWorldDrop("hyperion_pauldrons", "Hyperion Pauldrons", "Hyperion set", "Blasted Lands / Silithus", 10390)
classicWorldDrop("tyrants_chestpiece", "Tyrant's Chestpiece", "Tyrant's set", "Burning Steppes / Badlands", 14835)
classicWorldDrop("tyrants_legplates", "Tyrant's Legplates", "Tyrant's set", "Burning Steppes / Badlands", 14839)
classicWorldDrop("tyrants_gauntlets", "Tyrant's Gauntlets", "Tyrant's set", "Burning Steppes / Badlands", 14838)
classicWorldDrop("tyrants_epaulets", "Tyrant's Epaulets", "Tyrant's set", "Burning Steppes / Badlands", 14841)
