-- Nerf weapon primaries (−15% base) and defense/mixed primaries (−30% base); recompute denormalized primary_stat (§6.4, same M(rarity) and tol as 000012).
-- Runtime: global enemy encounter stat multiplier + unequipped-hero multiplier (see tuning / BuildEnemyInstanceForLevel).

WITH adjusted AS (
    SELECT
        g.id,
        GREATEST(
            1,
            ROUND(
                g.base_primary::numeric * (
                    CASE
                        WHEN g.slot = 'main_hand' THEN 0.85
                        WHEN g.stat_type::text IN ('defense', 'mixed') THEN 0.70
                        ELSE 1.0
                    END
                )
            )::integer
        ) AS new_base
    FROM public.gear AS g
)
UPDATE public.gear AS g
SET
    base_primary = a.new_base,
    primary_stat = GREATEST(
        1,
        ROUND(
            a.new_base::numeric
                * POWER(1.1, GREATEST(0, g.ilvl - 1))
                * (CASE g.rarity::text
                    WHEN 'common' THEN 1.0
                    WHEN 'uncommon' THEN 1.0877573
                    WHEN 'rare' THEN 1.1832160
                    WHEN 'epic' THEN 1.2870518
                    WHEN 'legendary' THEN 1.40
                    ELSE 1.0
                END)
                * (0.92::numeric + (mod(g.id, 24)::numeric / 23.0) * 0.23)
        )::integer
    )
FROM adjusted AS a
WHERE g.id = a.id;

UPDATE public.runtime_config
SET
    payload = payload || jsonb_build_object(
        'enemyEncounterStatMultiplier', 1.2,
        'enemyStatMultiplierVsUnequippedHero', 0.85
    ),
    updated_at = now()
WHERE id = true;
