-- Unified gear table replacing weapons, armor, and equipment_items
CREATE TABLE IF NOT EXISTS gear (
    id              BIGSERIAL PRIMARY KEY,
    slot            TEXT NOT NULL,
    form_id         TEXT NOT NULL DEFAULT '',
    name            TEXT NOT NULL,
    subtype         TEXT NOT NULL DEFAULT '',
    rarity          TEXT NOT NULL DEFAULT 'common',
    ilvl            INT NOT NULL DEFAULT 1,
    base_primary    INT NOT NULL DEFAULT 0,
    primary_stat    INT NOT NULL DEFAULT 0,
    stat_type       TEXT NOT NULL DEFAULT 'mixed',
    speed_modifier  DOUBLE PRECISION NOT NULL DEFAULT 1.0,
    crit_chance     DOUBLE PRECISION NOT NULL DEFAULT 0.0,
    agility_bonus   INT NOT NULL DEFAULT 0,
    set_name        TEXT NOT NULL DEFAULT '',
    special_effect  TEXT NOT NULL DEFAULT '',
    created_at      TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- Hero gear: one row per equipped slot (replaces weapon_id, armor_id, and hero_equipment)
CREATE TABLE IF NOT EXISTS hero_gear (
    hero_id  BIGINT NOT NULL REFERENCES heroes(id) ON DELETE CASCADE,
    slot     TEXT NOT NULL,
    gear_id  BIGINT NOT NULL REFERENCES gear(id),
    PRIMARY KEY (hero_id, slot)
);
CREATE INDEX IF NOT EXISTS idx_hero_gear_hero ON hero_gear(hero_id);

-- Migrate existing weapon data to gear table (safe to re-run if migration retried)
INSERT INTO gear (id, slot, name, subtype, rarity, ilvl, base_primary, primary_stat, stat_type, speed_modifier, crit_chance, special_effect)
SELECT id, 'main_hand', name, type, rarity, ilvl, damage, damage, 'attack', speed, crit_chance, special_effect
FROM weapons
ON CONFLICT (id) DO NOTHING;

-- Migrate existing armor data to gear table (offset IDs by 1000 to avoid conflicts)
INSERT INTO gear (id, slot, name, subtype, rarity, ilvl, base_primary, primary_stat, stat_type, speed_modifier, agility_bonus, set_name, special_effect)
SELECT id + 1000, 'chest', name, type, rarity, ilvl, defense, defense, 'defense', speed_modifier, agility_bonus, set_name, special_effect
FROM armor
ON CONFLICT (id) DO NOTHING;

-- Migrate equipment_items to gear (offset by 2000)
INSERT INTO gear (id, slot, form_id, name, rarity, ilvl, base_primary, primary_stat, stat_type)
SELECT id + 2000, slot, form_id, name, rarity, ilvl, base_primary, primary_stat, stat_type
FROM equipment_items
ON CONFLICT (id) DO NOTHING;

-- Migrate hero weapon/armor refs to hero_gear
INSERT INTO hero_gear (hero_id, slot, gear_id)
SELECT id, 'main_hand', weapon_id FROM heroes WHERE weapon_id IS NOT NULL
ON CONFLICT DO NOTHING;

INSERT INTO hero_gear (hero_id, slot, gear_id)
SELECT id, 'chest', armor_id + 1000 FROM heroes WHERE armor_id IS NOT NULL
ON CONFLICT DO NOTHING;

-- Migrate hero_equipment to hero_gear
INSERT INTO hero_gear (hero_id, slot, gear_id)
SELECT hero_id, slot, item_id + 2000 FROM hero_equipment
ON CONFLICT DO NOTHING;

-- Reset gear sequence to avoid ID conflicts
SELECT setval('gear_id_seq', (SELECT COALESCE(MAX(id), 0) + 1 FROM gear));
