import json, urllib.request, urllib.parse, sys, datetime
from pathlib import Path
from zoneinfo import ZoneInfo
root=Path(__file__).parent
stage=sys.argv[1]
manifest=root/'notification-requests.json'
data=json.loads(manifest.read_text()) if manifest.exists() else {}
now=datetime.datetime.now(ZoneInfo('Asia/Seoul')).strftime('%Y%m%d%H%M%S')
if stage in ('approval','control'):
    if stage in data: raise SystemExit('Request already exists; use replay-'+stage)
    trx=f'BROOM-QA-4274-{now}'+('-CONTROL' if stage=='control' else '')
    params=dict(tmnId='1234567890',catId='1234567890',cancelYN='N',wTid=trx,tid='VAN-'+trx,ediNo='ORDER-'+trx,appDtm=now,amt='1004',appNo='87654321',quota='00',cardNo='457973******1846',cardNm='테스트카드',ordNm='QA테스트',goodsName='브룸 통보 QA')
    data[stage]=params
elif stage in ('cancel','control-cancel'):
    if stage in data: raise SystemExit('Request already exists; use replay-'+stage)
    original=data['approval' if stage=='cancel' else 'control']['wTid']
    params=dict(tmnId='1234567890',cancelYN='Y',wTid=original+'-CANCEL',wRootTid=original,amt='1004',ccDnt=now)
    data[stage]=params
elif stage.startswith('replay-'):
    params=data[stage.removeprefix('replay-')]
else: raise SystemExit('Unknown stage')
manifest.write_text(json.dumps(data,ensure_ascii=False,indent=2))
url='https://api-dev.biscuitpay.com/api/v1/payment/notification/broom?'+urllib.parse.urlencode(params)
with urllib.request.urlopen(url,timeout=30) as response:
    result=dict(stage=stage,request=params,status=response.status,body=response.read().decode(),observedAt=datetime.datetime.now(ZoneInfo('Asia/Seoul')).isoformat())
(root/(stage+'-response.json')).write_text(json.dumps(result,ensure_ascii=False,indent=2))
print(json.dumps(result,ensure_ascii=False))
