from pathlib import Path
import json
import subprocess
import sys
from datetime import datetime, timezone, timedelta

folder = Path(__file__).resolve().parent
root = folder.parent
outbox = json.loads((folder/'outbox.json').read_text())
recipient = json.loads((folder/'recipient.json').read_text())
assert recipient['author']=='亓洋洋' and recipient['userId']=='629107255'
item = next(x for x in outbox['items'] if x['id']==sys.argv[1])
receipt = folder/(item['id']+'-receipt.json')
if receipt.exists():
    raise SystemExit('Write attempted already; inspect its result before any replay.')
now = datetime.now(timezone(timedelta(hours=8)))
record = {'item':item['id'],'state':'started','started_at':now.isoformat()}
receipt.write_text(json.dumps(record,ensure_ascii=False,indent=2))
args = ['dws','chat','+messages-send','--as','user','--open-dingtalk-id',
        recipient['openDingTalkId'],'--profile',outbox['profile'],
        '--idempotency-key',item['idempotency_key'],'--format','json','--yes']
if 'file' in item:
    args += ['--msg-type','file','--file','./'+item['file']]
else:
    args += ['--title','#597084 统一修复代码与改动矩阵','--markdown',item['text']]
result = subprocess.run(args,cwd=root,capture_output=True,text=True)
record.update(state='returned',returncode=result.returncode,stdout=result.stdout,stderr=result.stderr)
try:
    record['response']=json.loads(result.stdout)
except json.JSONDecodeError:
    pass
receipt.write_text(json.dumps(record,ensure_ascii=False,indent=2))
response=record.get('response',{})
print(json.dumps({'item':item['id'],'returncode':result.returncode,
                  'ok':response.get('ok'),'receipt':response.get('sendReceipt'),
                  'error':response.get('error',response.get('errorMsg'))},ensure_ascii=False))
raise SystemExit(result.returncode)
