"""Extract only observed original commodity identity/category data from Market.json."""
import hashlib,json,os,re
from pathlib import Path
source=Path(os.environ['USERPROFILE'])/'Saved Games/Frontier Developments/Elite Dangerous/Market.json'
raw=source.read_bytes();market=json.loads(raw.decode('utf-8-sig'));rows=[];ids=set()
for item in market['Items']:
 token=item.get('Category','');name=item.get('Name','')
 if not re.fullmatch(r'\$MARKET_category_[A-Za-z0-9_]+;',token) or not re.fullmatch(r'\$[A-Za-z0-9_]+_name;',name):continue
 identity=int(item['id'])
 if identity<=0 or identity in ids:raise ValueError('Duplicate original commodity identity')
 ids.add(identity)
 rows.append(dict(id=identity,symbol=name[1:-6],name=item.get('Name_Localised') or name[1:-6],category=token[17:-1],categoryName=item.get('Category_Localised') or token[17:-1]))
result=dict(source='Original local Market.json: id, Name, Name_Localised, Category and Category_Localised. Only taxonomy is retained.',sourceSha256=hashlib.sha256(raw).hexdigest(),definitions=rows)
target=Path('XFEEDToolBox.Core/Galaxy/commodity-categories.json');target.write_text(json.dumps(result,ensure_ascii=False,indent=2)+'\n',encoding='utf-8')
print(f'{len(rows)} observed commodities, {len(set(r["category"] for r in rows))} original categories; SHA256 {result["sourceSha256"]}')
