#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Update i18n JSON with gacha / wheel / pack game mechanics."""
import json
from pathlib import Path

root = Path(__file__).resolve().parents[1] / "src" / "i18n"

GAME_EN = {
    "hero": {
        "eyebrow": "Sri Lanka Festival Bonus",
        "h1_a": "Spin, Open Packs & Win Up to 200% + 150 Free Spins!",
        "h1_b": "Your Lucky Pack Awaits — Deposit from 500 LKR",
        "sub": "Spin the wheel, open a treasure pack, unlock daily rewards — then claim everything in the casino.",
        "cta_a": "Claim My Bonus",
        "cta_b": "Open Lucky Pack",
        "secondary": "🎡 Spin the Fortune Wheel first",
        "chips": ["🎡 Free Spin", "📦 3 Packs", "🎁 7-Day Rewards", "⚡ 500 LKR min"],
    },
    "ticker": {
        "live": "LIVE",
        "wins": [
            {"name": "Kasun", "amount": "Rs 48,200", "game": "Aviator"},
            {"name": "Priya", "amount": "Rs 12,500", "game": "Sweet Bonanza"},
            {"name": "Arun", "amount": "Rs 89,000", "game": "Gates of Olympus"},
            {"name": "Nimali", "amount": "Rs 6,800", "game": "Crazy Time"},
            {"name": "Dilan", "amount": "Rs 31,400", "game": "Sugar Rush"},
            {"name": "Tharindu", "amount": "Rs 22,100", "game": "Spaceman"},
        ],
    },
    "wheel": {
        "badge": "🎡 Lucky Spin",
        "title": "Fortune Wheel",
        "subtitle": "One free spin — every player wins a welcome reward!",
        "spin": "SPIN NOW",
        "spinning": "Spinning...",
        "claim": "Claim My Prize → Register",
        "result_prefix": "🎉 You won:",
        "disclaimer": "Demo spin for marketing. Full bonus on registration. 18+.",
        "segments": [
            "200% Bonus",
            "150 FS",
            "Rs 500 Pack",
            "50 FS",
            "100% Bonus",
            "Mystery Box",
            "75 FS",
            "Lucky 7 Pack",
        ],
    },
    "packs": {
        "badge": "📦 Gacha Packs",
        "title": "Open Your Treasure Pack",
        "subtitle": "Tap a chest — reveal your bonus inside",
        "open": "Tap to open",
        "revealed_label": "Your pack contains:",
        "revealed_cta": "Unlock in Casino →",
        "bronze": {"name": "Bronze", "icon": "🥉", "prize": "50 Free Spins + 100% Bonus"},
        "silver": {"name": "Silver", "icon": "🥈", "prize": "100 Free Spins + 150% Bonus"},
        "gold": {"name": "Gold", "icon": "🥇", "prize": "150 Free Spins + 200% Bonus"},
    },
    "rewards": {
        "badge": "🎁 Daily Path",
        "title": "7-Day Reward Path",
        "subtitle": "Register today — unlock a new gift every day",
        "note": "Day 1 unlocked after registration. Days 2–7 in the casino.",
        "days": [
            {"label": "Day 1", "icon": "🎁", "reward": "200%"},
            {"label": "Day 2", "icon": "🎰", "reward": "30 FS"},
            {"label": "Day 3", "icon": "💎", "reward": "50 FS"},
            {"label": "Day 4", "icon": "🔥", "reward": "Cashback"},
            {"label": "Day 5", "icon": "⭐", "reward": "75 FS"},
            {"label": "Day 6", "icon": "🎯", "reward": "Reload"},
            {"label": "Day 7", "icon": "👑", "reward": "VIP Pack"},
        ],
    },
}

GAME_SI = {
    "hero": {
        "eyebrow": "\u0dc1\u0dca\u200d\u0dbb\u0dd3 \u0dbd\u0d82\u0d9a\u0dcf\u0dc0 \u0db4\u0dd2\u0dc5\u0dd2\u0d9c\u0dd0\u0db1\u0dd3\u0db8\u0dda \u0db6\u0ddd\u0db1\u0dc3\u0dca",
        "h1_a": "\u0d9a\u0dd0\u0dbb\u0dc0\u0dcf, \u0db4\u0dd0\u0d9a\u0dca \u0dc0\u0dd2\u0dc0\u0dbb\u0dd4 \u0d9a\u0dbb \u0db6\u0ddd\u0db1\u0dc3\u0dca 200% + \u0db1\u0ddc\u0db8\u0dd2\u0dbd\u0dda \u0d9a\u0dd0\u0dbb\u0d9a\u0dd3\u0db8\u0dca 150 \u0daf\u0d9a\u0dca\u0dc0\u0dcf \u0da2\u0dba\u0d9c\u0dca\u0dbb\u0dc4\u0dab\u0dba!",
        "h1_b": "\u0d94\u0db6\u0dda \u0dc3\u0dd6\u0db7\u0dca\u0dba \u0db4\u0dd0\u0d9a\u0dca \u0db4\u0dd0\u0dbb\u0dd2\u0dc3\u0dd2\u0dad\u0dd2\u0dba\u0dd2 \u2014 \u0dbb\u0dd4. 500 \u0dc3\u0dd2\u0da7 \u0dad\u0dd0\u0db1\u0dca\u0db4\u0dad\u0dd4\u0dc0\u0dd9\u0db1\u0dca",
        "sub": "\u0d9a\u0dd0\u0dbb\u0dc0\u0dcf \u0d9a\u0dd0\u0dbb\u0db1\u0dca\u0db1, \u0db4\u0dd0\u0d9a\u0dca \u0dc0\u0dd2\u0dc0\u0dbb\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1, \u0daf\u0dd2\u0db1\u0dca\u0db1\u0dd3\u0db8\u0dca \u0db4\u0dc5\u0db8\u0dd4 \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1 \u2014 \u0db4\u0dc3\u0dd4 \u0d9a\u0dd0\u0dc3\u0dd2\u0db1\u0ddd\u0dc0\u0da7 \u0dc3\u0dd2\u0dba\u0dbd\u0db6\u0db8 \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1.",
        "cta_a": "\u0db6\u0ddd\u0db1\u0dc3\u0dca \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1",
        "cta_b": "\u0dc3\u0dd6\u0db7\u0dca\u0dba \u0db4\u0dd0\u0d9a\u0dca \u0dc0\u0dd2\u0dc0\u0dbb\u0dd4 \u0d9a\u0dbb\u0db1\u0dca\u0db1",
        "secondary": "\u0d9a\u0dd0\u0dbb\u0db8\u0dd2\u0db1 \u0d9a\u0dd0\u0dbb\u0dc0\u0dcf \u0db4\u0dd0\u0dbd\u0db8 \u0d9a\u0dd0\u0dbb\u0db1\u0dca\u0db1",
        "chips": ["\ud83c\udfa1 \u0db1\u0ddc\u0db8\u0dd2\u0dbd\u0dda \u0d9a\u0dd0\u0dbb\u0d9a\u0dd3\u0db8\u0dca", "\ud83d\udce6 \u0db4\u0dd0\u0d9a\u0dca 3", "\ud83c\udf81 \u0daf\u0dd2\u0db1 7 \u0db4\u0dc5", "\u26a1 \u0dbb\u0dd4. 500"],
    },
    "ticker": {
        "live": "LIVE",
        "wins": [
            {"name": "\u0d9a\u0dc3\u0dd4\u0db1\u0dca", "amount": "Rs 48,200", "game": "Aviator"},
            {"name": "\u0db4\u0dca\u200d\u0dbb\u0dd2\u0dba", "amount": "Rs 12,500", "game": "Sweet Bonanza"},
            {"name": "\u0d85\u0dbb\u0dd4\u0db1\u0dca", "amount": "Rs 89,000", "game": "Gates of Olympus"},
        ],
    },
    "wheel": {
        "badge": "\ud83c\udfa1 \u0dc3\u0dd6\u0db7\u0dca\u0dba \u0d9a\u0dd0\u0dbb\u0d9a\u0dd3\u0db8\u0dca",
        "title": "\u0d9a\u0dd0\u0dbb\u0db8\u0dd2\u0db1 \u0d9a\u0dd0\u0dbb\u0dc0\u0dcf",
        "subtitle": "\u0d94\u0d9a \u0db1\u0ddc\u0db8\u0dd2\u0dbd\u0dda \u0d9a\u0dd0\u0dbb\u0d9a\u0dd3\u0db8\u0dca \u2014 \u0dc3\u0dd6\u0db7\u0dca\u0dba \u0db4\u0dc5\u0db8\u0dd4 \u0db4\u0dc5\u0db8\u0dd4\u0d9a\u0dd2 \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1!",
        "spin": "\u0d9a\u0dd0\u0dbb\u0db1\u0dca\u0db1",
        "spinning": "\u0d9a\u0dd0\u0dbb\u0dd2\u0dba\u0dd2...",
        "claim": "\u0db6\u0ddd\u0db1\u0dc3\u0dca \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1 \u2192",
        "result_prefix": "\ud83c\udf89 \u0d94\u0db6 \u0da2\u0dba\u0d9c\u0dca\u0dbb\u0dc4\u0dab\u0dba:",
        "disclaimer": "18+. \u0db4\u0dd2\u0da7\u0dd4\u0dc0\u0dd9\u0db1\u0dca \u0dbd\u0dd2\u0dba\u0dcf\u0db4\u0daf\u0dd2\u0d82\u0da0\u0dd2 \u0dc3\u0dd4\u0dbb\u0dd2\u0dba\u0dcf \u0db6\u0ddd\u0db1\u0dc3\u0dca.",
        "segments": ["200% \u0db6\u0ddd\u0db1\u0dc3\u0dca", "150 FS", "Rs 500", "50 FS", "100%", "Mystery", "75 FS", "Lucky 7"],
    },
    "packs": {
        "badge": "\ud83d\udce6 \u0db4\u0dd0\u0d9a\u0dca",
        "title": "\u0db4\u0dd0\u0d9a\u0dca \u0dc0\u0dd2\u0dc0\u0db1\u0dca\u0db1",
        "subtitle": "\u0db4\u0dd0\u0d9a\u0dca \u0d87\u0d9a\u0d9a\u0dca \u0d9a\u0dca\u200d\u0dbd\u0dd2\u0d9a\u0dca \u0d9a\u0dbb\u0db1\u0dca\u0db1",
        "open": "\u0dc0\u0dd2\u0dc0\u0db1\u0dca\u0db1",
        "revealed_label": "\u0d94\u0db6\u0dda \u0db4\u0dd0\u0d9a\u0dca \u0d91\u0d9a\u0dca\u0dc3\u0dd9:",
        "revealed_cta": "\u0d9a\u0dd0\u0dc3\u0dd2\u0db1\u0ddd\u0dc0\u0da7 \u0dc3\u0dd2\u0dba\u0dbd\u0db6\u0db8 \u2192",
        "bronze": {"name": "\u0db6\u0dca\u200d\u0dbb\u0dd0\u0dab\u0dca\u0dc3\u0dca", "icon": "\ud83e\udd49", "prize": "50 FS + 100%"},
        "silver": {"name": "\u0dc0\u0dd0\u0dbb\u0dd4", "icon": "\ud83e\udd48", "prize": "100 FS + 150%"},
        "gold": {"name": "\u0dc3\u0dd4\u0dbb\u0dd0\u0db1\u0dca", "icon": "\ud83e\udd47", "prize": "150 FS + 200%"},
    },
    "rewards": {
        "badge": "\ud83c\udf81 \u0daf\u0dd2\u0db1\u0dca\u0db1\u0dd3\u0db8\u0dca",
        "title": "\u0daf\u0dd2\u0db1 7 \u0db4\u0dc5\u0db8\u0dd4",
        "subtitle": "\u0d85\u0daf \u0dbd\u0dd2\u0dba\u0dcf\u0db4\u0daf\u0dd2\u0d82\u0da0\u0dd2 \u0dc3\u0dd4\u0dbb\u0dd2\u0dba\u0dcf \u0db4\u0dc5\u0db8\u0dd4\u0d9a\u0dd2 \u0dbd\u0db6\u0dcf\u0d9c\u0db1\u0dca\u0db1",
        "note": "\u0daf\u0dd2\u0db1 1 \u0dbd\u0dd2\u0dba\u0dcf\u0db4\u0daf\u0dd2\u0d82\u0da0\u0dd2 \u0db4\u0dc5\u0db8\u0dd4\u0d9a\u0dd2.",
        "days": [
            {"label": "\u0daf\u0dd2\u0db1 1", "icon": "\ud83c\udf81", "reward": "200%"},
            {"label": "\u0daf\u0dd2\u0db1 2", "icon": "\ud83c\udfb0", "reward": "30 FS"},
            {"label": "\u0daf\u0dd2\u0db1 3", "icon": "\ud83d\udc8e", "reward": "50 FS"},
            {"label": "\u0daf\u0dd2\u0db1 4", "icon": "\ud83d\udd25", "reward": "Cashback"},
            {"label": "\u0daf\u0dd2\u0db1 5", "icon": "\u2b50", "reward": "75 FS"},
            {"label": "\u0daf\u0dd2\u0db1 6", "icon": "\ud83c\udfaf", "reward": "Reload"},
            {"label": "\u0daf\u0dd2\u0db1 7", "icon": "\ud83d\udc51", "reward": "VIP"},
        ],
    },
}

GAME_TA = {
    "hero": {
        "eyebrow": "\u0b87\u0bb2\u0b99\u0bcd\u0b95\u0bc8 \u0ba4\u0bbf\u0bb0\u0bc1\u0bb5\u0bbf\u0bb4\u0bbe \u0baa\u0bcb\u0ba9\u0bb8\u0bcd",
        "h1_a": "\u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1, \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bb3\u0bc8 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1 200% + 150 \u0b87\u0bb2\u0bb5\u0b9a \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bb3\u0bc8 \u0bb5\u0bc6\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bb3\u0bcd!",
        "h1_b": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0b9a\u0bc1\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc7\u0b95\u0bcd \u0b95\u0bbe\u0ba4\u0bcd\u0ba4\u0bbf\u0bb0\u0bc1\u0b95\u0bcd\u0b95\u0bbf\u0ba4\u0bcd\u0ba4\u0bc1 \u2014 \u0bb0\u0bc2. 500 \u0bae\u0bc1\u0ba4\u0bb2\u0bcd",
        "sub": "\u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1, \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1, \u0ba4\u0bbf\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9 \u0baa\u0bca\u0ba9\u0bb8\u0bcd \u2014 \u0b95\u0bc7\u0bb8\u0bbf\u0ba9\u0bcb\u0bb5\u0bbf\u0bb2\u0bcd \u0baa\u0bc6\u0bb1\u0bc1\u0b99\u0bcd\u0b95\u0bb3\u0bcd.",
        "cta_a": "\u0baa\u0bcb\u0ba9\u0bb8\u0bc8\u0baa\u0bcd \u0baa\u0bc6\u0bb1\u0bc1\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
        "cta_b": "\u0b9a\u0bc1\u0baa\u0bcd\u0baa\u0bc1 \u0baa\u0bc7\u0b95\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1",
        "secondary": "\ud83c\udfa1 \u0bae\u0bc1\u0ba4\u0bb2\u0bbf\u0bb2\u0bcd \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1 \u0b9a\u0b95\u0bcd\u0b95\u0bb0\u0ba4\u0bcd\u0ba4\u0bc8 \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1\u0b99\u0bcd\u0b95\u0bb3\u0bcd",
        "chips": ["\ud83c\udfa1 \u0b87\u0bb2\u0bb5\u0b9a \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1", "\ud83d\udce6 3 \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1", "\ud83c\udf81 7 \u0ba8\u0bbe\u0b9f\u0bcd\u0b95\u0bb3\u0bcd", "\u26a1 \u0bb0\u0bc2. 500"],
    },
    "ticker": {
        "live": "LIVE",
        "wins": [
            {"name": "\u0b95\u0b9a\u0bc1\u0ba9\u0bcd", "amount": "Rs 48,200", "game": "Aviator"},
            {"name": "\u0baa\u0bbf\u0bb0\u0bbf\u0baf\u0bbe", "amount": "Rs 12,500", "game": "Sweet Bonanza"},
            {"name": "\u0b85\u0bb0\u0bc1\u0ba3\u0bcd", "amount": "Rs 89,000", "game": "Gates of Olympus"},
        ],
    },
    "wheel": {
        "badge": "\ud83c\udfa1 \u0b9a\u0bc1\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1",
        "title": "\u0b9a\u0bc1\u0baa\u0bcd\u0baa\u0bc1 \u0b9a\u0b95\u0bcd\u0b95\u0bb0\u0ba4\u0bcd\u0ba4\u0bc1",
        "subtitle": "\u0b92\u0bb0\u0bc1 \u0b87\u0bb2\u0bb5\u0b9a \u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1 \u2014 \u0b8e\u0bb2\u0bcd\u0bb2\u0bbe\u0bb0\u0bc1\u0bae\u0bcd \u0bb5\u0bc6\u0bb1\u0bcd\u0bb1\u0bc1\u0b95\u0bb3\u0bcd!",
        "spin": "\u0b9a\u0bc1\u0bb1\u0bcd\u0bb1\u0bc1",
        "spinning": "\u0b9a\u0bc1\u0bb1\u0bcd\u0bcd\u0bbf\u0b95\u0bbf\u0ba9\u0bcd\u0bb1\u0ba4\u0bc1...",
        "claim": "\u0baa\u0bcb\u0ba9\u0bb8\u0bc8\u0baa\u0bcd \u0baa\u0bc6\u0bb1\u0bc1\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u2192",
        "result_prefix": "\ud83c\udf89 \u0ba8\u0bc0\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0bb5\u0bc6\u0ba8\u0bcd\u0bb1\u0bc0\u0bb0\u0bcd:",
        "disclaimer": "18+. \u0baa\u0ba4\u0bbf\u0bb5\u0bc1 \u0baa\u0bcb\u0ba9\u0bb8\u0bcd \u0baa\u0ba4\u0bbf\u0bb5\u0bc1 \u0baa\u0bca\u0bb0\u0bc1\u0ba8\u0bcd\u0ba4\u0bc1.",
        "segments": ["200% \u0baa\u0bcb\u0ba9\u0bb8\u0bcd", "150 FS", "Rs 500", "50 FS", "100%", "Mystery", "75 FS", "Lucky 7"],
    },
    "packs": {
        "badge": "\ud83d\udce6 \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1\u0b95\u0bb3\u0bcd",
        "title": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1",
        "subtitle": "\u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1 \u0b9f\u0bc8 \u0b95\u0bcd\u0bb2\u0bbf\u0b95\u0bcd \u0b9a\u0bc6\u0baf\u0bcd\u0ba4\u0bc1",
        "open": "\u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1",
        "revealed_label": "\u0b89\u0b99\u0bcd\u0b95\u0bb3\u0bcd \u0baa\u0bc7\u0b95\u0bcd\u0b95\u0bc1:",
        "revealed_cta": "\u0b95\u0bc7\u0bb8\u0bbf\u0ba9\u0bcb\u0bb5\u0bbf\u0bb2\u0bcd \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1 \u2192",
        "bronze": {"name": "\u0bb5\u0bc6\u0b99\u0bcd\u0b95\u0bc1", "icon": "\ud83e\udd49", "prize": "50 FS + 100%"},
        "silver": {"name": "\u0bb5\u0bc6\u0bb3\u0bbf", "icon": "\ud83e\udd48", "prize": "100 FS + 150%"},
        "gold": {"name": "\u0ba4\u0b99\u0bcd\u0b95\u0bae\u0bcd", "icon": "\ud83e\udd47", "prize": "150 FS + 200%"},
    },
    "rewards": {
        "badge": "\ud83c\udf81 \u0ba4\u0bbf\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9 \u0baa\u0ba4\u0b95\u0bcd\u0b95\u0bae\u0bcd",
        "title": "7 \u0ba8\u0bbe\u0b9f\u0bcd \u0baa\u0bcb\u0ba9\u0bb8\u0bcd \u0baa\u0bbe\u0ba4\u0bc8",
        "subtitle": "\u0b87\u0ba9\u0bcd\u0bb1\u0bc1 \u0baa\u0ba4\u0bbf\u0bb5\u0bc1 \u2014 \u0ba4\u0bbf\u0ba9\u0ba4\u0bcd\u0ba4\u0bbf\u0ba9 \u0baa\u0ba4\u0b95\u0bcd\u0b95\u0bae\u0bcd",
        "note": "\u0ba8\u0bbe\u0bb3\u0bcd 1 \u0baa\u0ba4\u0bbf\u0bb5\u0bc1 \u0baa\u0bbf\u0ba9\u0bcd\u0ba4\u0bc1 \u0ba4\u0bbf\u0bb1\u0b95\u0bcd\u0b95\u0bc1\u0bae\u0bcd.",
        "days": [
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 1", "icon": "\ud83c\udf81", "reward": "200%"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 2", "icon": "\ud83c\udfb0", "reward": "30 FS"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 3", "icon": "\ud83d\udc8e", "reward": "50 FS"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 4", "icon": "\ud83d\udd25", "reward": "Cashback"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 5", "icon": "\u2b50", "reward": "75 FS"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 6", "icon": "\ud83c\udfaf", "reward": "Reload"},
            {"label": "\u0ba8\u0bbe\u0bb3\u0bcd 7", "icon": "\ud83d\udc51", "reward": "VIP"},
        ],
    },
}

updates = {"en.json": GAME_EN, "si.json": GAME_SI, "ta.json": GAME_TA}

for fname, game in updates.items():
    path = root / fname
    data = json.loads(path.read_text(encoding="utf-8"))
    for key, val in game.items():
        if isinstance(val, dict) and key in data and isinstance(data[key], dict):
            data[key].update(val)
        else:
            data[key] = val
    if data.get("sticky") == "Claim Bonus":
        data["sticky"] = data["hero"]["cta_a"]
    path.write_text(json.dumps(data, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
    print("updated", fname)
