73 lines
2.2 KiB
Python
73 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Generate a deck upgrade report comparing collection to existing decks.
|
|
Usage:
|
|
python deck_report.py --collection collection_hydrated/deck.json --decks-dir decks/ --output report.md
|
|
"""
|
|
|
|
import argparse
|
|
import json
|
|
from pathlib import Path
|
|
|
|
|
|
def load_collection(path: str) -> dict:
|
|
with open(path, 'r') as f:
|
|
cards = json.load(f)
|
|
return {c['name']: c for c in cards}
|
|
|
|
|
|
def load_deck(path: str) -> dict:
|
|
with open(path, 'r') as f:
|
|
data = json.load(f)
|
|
if 'cards' in data:
|
|
return data
|
|
return {'cards': data, 'name': Path(path).stem}
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(description='Generate deck upgrade report')
|
|
parser.add_argument('--collection', '-c', required=True)
|
|
parser.add_argument('--decks-dir', '-d', required=True)
|
|
parser.add_argument('--output', '-o', required=True)
|
|
args = parser.parse_args()
|
|
|
|
collection = load_collection(args.collection)
|
|
decks = []
|
|
for path in Path(args.decks_dir).glob('*.json'):
|
|
decks.append(load_deck(str(path)))
|
|
|
|
# Find all cards in decks
|
|
all_deck_cards = set()
|
|
for deck in decks:
|
|
all_deck_cards.update(deck['cards'].keys())
|
|
|
|
available = set(collection.keys()) - all_deck_cards
|
|
|
|
report = []
|
|
report.append("# Deck Upgrade Report\n")
|
|
report.append(f"Collection size: {len(collection)} cards")
|
|
report.append(f"Cards in decks: {len(all_deck_cards)}")
|
|
report.append(f"Available for upgrades: {len(available)}\n")
|
|
|
|
for deck in decks:
|
|
deck_name = deck.get('name', 'Unknown')
|
|
deck_cards = deck['cards']
|
|
deck_colors = set()
|
|
for name in deck_cards:
|
|
card = collection.get(name, {})
|
|
ci = card.get('color_identity', [])
|
|
deck_colors.update(ci)
|
|
|
|
report.append(f"\n---\n## {deck_name}\n")
|
|
report.append(f"**Colors:** {''.join(sorted(deck_colors))}")
|
|
report.append(f"**Total cards:** {sum(deck_cards.values())}")
|
|
report.append(f"**Unique cards:** {len(deck_cards)}\n")
|
|
|
|
with open(args.output, 'w') as f:
|
|
f.write('\n'.join(report))
|
|
print(f"Report saved to {args.output}")
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|