import json
from pathlib import Path

# Canonical mapping rules based on client/webapp/assets/README.md and codebase conventions:
# 1. Loading screen -> client/webapp/assets/loading/
# 2. Login parallax -> client/webapp/assets/banners/
# 3. Touch controls HUD -> client/webapp/assets/ui/combat/ or client/webapp/assets/ui/
# 4. World background/fog -> client/webapp/assets/map/
# 5. Bazaar trade panels -> client/webapp/assets/ui/trade/
# 6. Crafting orbs -> client/webapp/assets/currencies/
# 7. Bloodstones currency -> client/webapp/assets/currencies/
# 8. Loot drop particles -> client/webapp/assets/savage_vfx/
# 9. Cutscene storyboard -> client/webapp/assets/banners/
# 10. Feral elders avatars -> client/webapp/assets/characters/npcs/ or client/webapp/assets/portraits/
# 11. Quest scroll variants -> client/webapp/assets/ui/quests/
# 12. Security alert badges -> client/webapp/assets/ui/security/
# 13. Security shield animation -> client/webapp/assets/ui/security/
# 14. Forensic watermark -> client/webapp/assets/ui/security/
# 15. Agent orb activation VFX -> client/webapp/assets/savage_vfx/
# 16. AoI telemetry visual -> client/webapp/assets/ui/
# 17. Harvest report overlay -> client/webapp/assets/ui/
# 18. Crafting station UI -> client/webapp/assets/ui/
# 19. Hideout safehaven props -> client/webapp/assets/map/
# 20. Map device & arena -> client/webapp/assets/map/
# 21. Passive tree nodes -> client/webapp/assets/ui/passive_tree/

mapping = {
    "DRQ-20261001-CLI-LOADING-SCREEN-ART": "loading",
    "DRQ-20261001-CLI-LOGIN-PARALLAX-LAYERS": "banners",
    "DRQ-20261001-CLI-TOUCH-CONTROLS-PROMOTION": "ui/combat",
    "DRQ-20261001-CLI-WORLD-BACKGROUND-LAYERS": "map",
    "DRQ-20261001-ECO-BAZAAR-TRADE-PANELS": "ui/trade",
    "DRQ-20261001-ECO-CRAFTING-ORBS-CATALOG": "currencies",
    "DRQ-20261001-ECO-CURRENCY-BLOODSTONES": "currencies",
    "DRQ-20261001-ECO-LOOT-DROP-PARTICLES": "savage_vfx",
    "DRQ-20261001-NPC-CUTSCENE-STORYBOARD": "banners",
    "DRQ-20261001-NPC-FERAL-ELDERS-AVATARS": "characters/npcs",
    "DRQ-20261001-NPC-QUEST-SCROLL-VARIANTS": "ui/quests",
    "DRQ-20261001-SEC-ALERT-BADGES-QUARANTINE": "ui/security",
    "DRQ-20261001-SEC-SHIELD-ACTIVE-ANIMATION": "ui/security",
    "DRQ-20261001-SEC-UI-FORENSIC-WATERMARK": "ui/security",
    "DRQ-20261001-SRV-AGENT-ORB-ACTIVATION-VFX": "savage_vfx",
    "DRQ-20261001-SRV-AOI-SYNC-TELEMETRY-VISUAL": "ui",
    "DRQ-20261001-SRV-HARVEST-REPORT-OVERLAY": "ui",
    "DRQ-20261001-SYS-CRAFTING-STATION-UI": "ui",
    "DRQ-20261001-SYS-HIDEOUT-SAFEHAVEN-PROPS": "map",
    "DRQ-20261001-SYS-MAP-DEVICE-ARENA": "map",
    "DRQ-20261001-SYS-PASSIVE-TREE-NODES": "ui/passive_tree",
}

with open(r".agents/teamwork/spec_miner_techart_3/drq_summary.json", "r", encoding="utf-8") as f:
    drqs = json.load(f)

lines = []
lines.append("=" * 120)
lines.append(f"{'DRQ ID':<42} | {'Approved Source Dir':<45} | {'Client Sync Destination':<35}")
lines.append("-" * 120)

for d in drqs:
    req_id = d["id"]
    dest_sub = mapping.get(req_id, "ui")
    appr_dir = f"assets/approved/{req_id}/"
    client_dest = f"client/webapp/assets/{dest_sub}/"
    lines.append(f"{req_id:<42} | {appr_dir:<45} | {client_dest:<35}")
    for item in d["all_delivs"]:
        fname = Path(item).name
        lines.append(f"  -> {fname:<40} -> {client_dest}{fname}")
    lines.append("-" * 120)

out_map = Path(r".agents/teamwork/spec_miner_techart_3/exact_mapping.txt")
out_map.write_text("\n".join(lines), encoding="utf-8")
print("Wrote exact_mapping.txt successfully.")
