import { chromium } from 'playwright-core';
import { mkdir, readFile, writeFile } from 'node:fs/promises';
import { execFileSync } from 'node:child_process';
const [home,origin,side]=process.argv.slice(2);
const folder=`${process.env.EVIDENCE_DIR ?? '/tmp/attachment-evidence'}/manual-${side}`;await mkdir(`${folder}/project`,{recursive:true});
await writeFile(`${folder}/project/README.md`,'Synthetic attachment cache evidence\n');
for(const args of [['init','--quiet','--initial-branch=main'],['add','.'],['-c','user.name=Scenario','-c','user.email=scenario@example.invalid','commit','--quiet','-m','Initial synthetic data']])execFileSync('git',args,{cwd:`${folder}/project`});
execFileSync(process.execPath,['apps/server/src/bin.ts','project','add',`${folder}/project`,'--title','Image cache evidence','--base-dir',home!],{stdio:'pipe'});
const context=await chromium.launchPersistentContext(`${folder}/profile`,{headless:true,viewport:{width:1280,height:800}});
try {
 const page=context.pages()[0]!;await page.addInitScript(()=>performance.setResourceTimingBufferSize(10000));
 await page.goto((await readFile(`${home}/pairing-path`,'utf8')).trim().startsWith('http')?(await readFile(`${home}/pairing-path`,'utf8')).trim():origin+(await readFile(`${home}/pairing-path`,'utf8')).trim());
 await page.locator('input[type=file]').waitFor({state:'attached',timeout:90000});
 await page.getByRole('textbox').fill('Please inspect this synthetic image');
 await page.evaluate(async()=>{const canvas=document.createElement('canvas');canvas.width=1800;canvas.height=1200;const ctx=canvas.getContext('2d')!;const pixels=ctx.createImageData(canvas.width,canvas.height);let seed=17;for(let i=0;i<pixels.data.length;i+=4){seed=(seed*1664525+1013904223)>>>0;pixels.data[i]=seed&255;pixels.data[i+1]=(seed>>>8)&255;pixels.data[i+2]=(seed>>>16)&255;pixels.data[i+3]=255;}ctx.putImageData(pixels,0,0);ctx.fillStyle='#102030';ctx.fillRect(100,100,1600,300);ctx.fillStyle='white';ctx.font='bold 78px sans-serif';ctx.fillText('COMMITTED IMAGE',180,280);const blob=await new Promise<Blob>(resolve=>canvas.toBlob(b=>resolve(b!),'image/png'));const transfer=new DataTransfer();transfer.items.add(new File([blob],'synthetic-cache-image.png',{type:'image/png'}));const input=document.querySelector('input[type=file]') as HTMLInputElement;input.files=transfer.files;input.dispatchEvent(new Event('change',{bubbles:true}));});
 await page.getByRole('textbox').press('Enter');
 await page.waitForFunction(()=>Array.from(document.images).some(i=>{try{return !JSON.parse(atob(i.src.split('/api/assets/')[1]!.split('.')[0]!.replaceAll('-','+').replaceAll('_','/'))).attachmentId.startsWith('pending-')&&i.complete&&i.naturalWidth>0;}catch{return false;}}),{},{timeout:90000});
 await writeFile(`${folder}/state.private.json`,JSON.stringify({url:page.url(),home,folder}));
 console.log('Synthetic committed image ready');
}finally{await context.close();}
