import urllib.request,json,base64,sys
from pathlib import Path
root=Path(__file__).parent
token=(root/'forgejo-token').read_text().strip()
origin='http://127.0.0.1:33029'
def api(method,path,data=None):
 r=urllib.request.Request(origin+'/api/v1/'+path,data=json.dumps(data).encode() if data is not None else None,headers={'Authorization':'token '+token,'Content-Type':'application/json'},method=method)
 with urllib.request.urlopen(r) as s: return json.load(s) if s.status!=204 else None
if sys.argv[1]=='seed':
 name=sys.argv[2]
 api('POST','user/repos',{'name':name,'auto_init':True,'default_branch':'main','private':False})
 api('POST',f'repos/evidence/{name}/branches',{'new_branch_name':'feature','old_branch_name':'main'})
 api('POST',f'repos/evidence/{name}/contents/example.txt',{'branch':'feature','content':base64.b64encode(b'Rename sync evidence\n').decode(),'message':'Add example'})
 pr=api('POST',f'repos/evidence/{name}/pulls',{'base':'main','head':'feature','title':'Keep linked status current'})
 print(json.dumps({'repository':name,'number':pr['number'],'state':pr['state']}))
elif sys.argv[1]=='rename':
 old,new=sys.argv[2:4]
 api('PATCH',f'repos/evidence/{old}',{'name':new})
 api('PATCH',f'repos/evidence/{new}/issues/1',{'state':'closed'})
 print(json.dumps({'repository':new,'number':1,'state':'closed'}))
elif sys.argv[1]=='reset':
 api('PATCH','repos/evidence/before-new',{'name':'before-old'})
 api('PATCH','repos/evidence/before-old/issues/1',{'state':'open'})
 print('Restored original repository name and OPEN PR.')
elif sys.argv[1]=='reopen':
 api('PATCH','repos/evidence/before-old/issues/1',{'state':'open'})
 print('Reopened the same synthetic PR.')
