import {readFile,writeFile,mkdir} from 'node:fs/promises';
import assert from 'node:assert/strict';
const recording=JSON.parse(await readFile('records/recording.json','utf8'));
assert.equal(recording.environment.otlpEnabled,true,'Capture with OTLP enabled first');
const directory='records/jaeger';await mkdir(directory,{recursive:true});
const results=[];
for(const scenario of recording.scenarios)for(const local of scenario.traces){
 if(!local.spans.length)continue;
 let data;
 for(let attempt=0;attempt<10;attempt++){
  const response=await fetch('http://127.0.0.1:16687/api/traces/'+local.traceId,{signal:AbortSignal.timeout(3000)});
  if(response.ok){const candidate=await response.json();if(candidate.data?.[0]?.spans?.length>=local.spans.length){data=candidate;break;}}
  await new Promise(r=>setTimeout(r,300));
 }
 assert.ok(data,'Jaeger trace missing: '+local.traceId);
 const trace=data.data[0],remote=new Set(trace.spans.map(s=>s.spanID));
 for(const span of local.spans)assert.ok(remote.has(span.spanId),'Missing exported span: '+span.spanId);
 await writeFile(directory+'/'+local.traceId+'.json',JSON.stringify(data,null,2)+'\n');
 results.push({scenario:scenario.id,traceId:local.traceId,localSpanCount:local.spans.length,jaegerSpanCount:trace.spans.length,allIdsMatched:true});
}
const result={status:'PASS',verifiedAt:new Date().toISOString(),collector:'0.165.0',jaeger:'2.23.0',mechanism:'Node SDK → OTLP/HTTP JSON → Collector → OTLP/HTTP → Jaeger API',traces:results,spanCount:results.reduce((n,x)=>n+x.localSpanCount,0)};
await writeFile('records/collector-verification.json',JSON.stringify(result,null,2)+'\n');console.log(JSON.stringify(result));
