#!/usr/bin/env python3
"""Run against an isolated, already-running T3 development server.
Usage: python3 prove.py CHECKOUT T3_HOME PORT OUTPUT_PARENT
Creates synthetic state through the CLI; calls actual MCP over HTTP.
Credentials are kept in memory and excluded from output.
"""
import datetime, json, os, pathlib, subprocess, sys
checkout, home, port, parent = sys.argv[1:]
out = pathlib.Path(parent) / datetime.datetime.now(datetime.timezone.utc).strftime('%Y%m%dT%H%M%S%fZ')
out.mkdir(parents=True)
def cli(*args, env=None):
    p = subprocess.run(['node', 'apps/server/src/bin.ts', *args], cwd=checkout, env=env, text=True, capture_output=True)
    if p.returncode: raise RuntimeError(f'CLI command {args[0]} failed: {p.stderr}')
    return p.stdout.strip()
sha = subprocess.check_output(['git','rev-parse','HEAD'],cwd=checkout,text=True).strip()
workspace = out / 'empty-project'
workspace.mkdir()
subprocess.run(['git','init','--quiet',str(workspace)],check=True)
cli('project','add',str(workspace),'--title','Empty control project','--base-dir',home)
token = cli('auth','session','issue','--subject','mcp-client','--ttl','15m','--token-only','--base-dir',home)
env = {**os.environ, 'T3_ACP_MCP_ENDPOINT':f'http://127.0.0.1:{port}/mcp', 'T3_ACP_MCP_AUTHORIZATION':f'Bearer {token}'}
def call(tool, args):
    return json.loads(cli('acp-mcp-call',tool,json.dumps(args),env=env))
# List IDs without uploading the synthetic workspace's internal absolute path.
projects = call('t3_project_list',{})
missing = call('t3_thread_list',{'projectId':'not-a-project','limit':5})
print('MISSING',json.dumps(missing,indent=2))
project_data = projects.get('structuredContent')
if project_data is None:
    project_data = json.loads(next(c['text'] for c in projects['content'] if c['type']=='text'))
project_id = next(p['id'] for p in project_data['projects'] if p['title']=='Empty control project')
empty = call('t3_thread_list',{'projectId':project_id,'limit':5})
result = {'commit':sha,'environment':'Real T3 development server; HTTP MCP; fresh isolated database; synthetic project; no browser', 'calls':[{'tool':'t3_thread_list','arguments':{'projectId':'not-a-project','limit':5},'result':missing},{'tool':'t3_thread_list','arguments':{'projectId':project_id,'limit':5},'result':empty}]}
(out/'transcript.json').write_text(json.dumps(result,indent=2)+'\n')
print('OUTPUT',str(out/'transcript.json'))
print('EMPTY',json.dumps(empty,indent=2))
