from pathlib import Path
from decimal import Decimal
from datetime import date, timedelta
from collections import Counter
import csv, json
ROOT=Path(__file__).resolve().parents[1]
out=ROOT/'outputs'; out.mkdir(exist_ok=True)
path=out/'py-files-orders.csv'
rows=[{'user':'1','amount':'10.50','category':'book, study'},
      {'user':'2','amount':'20.00','category':'中文类别'}]
with path.open('w',encoding='utf-8',newline='') as f:
    writer=csv.DictWriter(f,fieldnames=['user','amount','category'])
    writer.writeheader(); writer.writerows(rows)
with path.open(encoding='utf-8',newline='') as f:
    loaded=list(csv.DictReader(f))
assert loaded==rows
total=sum((Decimal(r['amount']) for r in loaded),Decimal('0'))
summary={'users':len({r['user'] for r in loaded}),'total':str(total)}
config=out/'py-files-summary.json'
config.write_text(json.dumps(summary,ensure_ascii=False,indent=2),encoding='utf-8')
assert json.loads(config.read_text(encoding='utf-8'))==summary
assert total==Decimal('30.50')
assert date(2026,1,31)+timedelta(days=1)==date(2026,2,1)
print(summary)
print('category counts',dict(Counter(r['category'] for r in loaded)))
print('files written',path.name,config.name)
