import {mkdir,copyFile,readFile,writeFile,readdir} from 'node:fs/promises';
import {resolve,relative,dirname} from 'node:path';
import {build} from 'esbuild';
const root=resolve('.'),out=resolve('public');await mkdir(out,{recursive:true});await mkdir(resolve(out,'vendor'),{recursive:true});
for(const file of ['index.html','style.css'])await copyFile('ui/'+file,resolve(out,file));
await copyFile('node_modules/bootstrap/dist/css/bootstrap.min.css',resolve(out,'vendor/bootstrap.min.css'));
await copyFile('node_modules/bootstrap/LICENSE',resolve(out,'vendor/bootstrap-LICENSE.txt'));
await copyFile('THIRD-PARTY-LICENSES.txt',resolve(out,'THIRD-PARTY-LICENSES.txt'));
await build({entryPoints:['ui/app.js'],outfile:'public/app.js',bundle:true,format:'esm',platform:'browser',target:'es2022',minify:false,legalComments:'eof'});
await copyFile('records/recording.json','public/recording.json');
try{await copyFile('records/collector-verification.json','public/collector-verification.json');}catch{await writeFile('public/collector-verification.json',JSON.stringify({status:'NOT_RUN',message:'Run the Collector and npm run verify:collector to generate this evidence.'},null,2)+'\n');}
async function copySources(directory){for(const entry of await readdir(directory,{withFileTypes:true})){const path=resolve(directory,entry.name);if(entry.isDirectory())await copySources(path);else{const dest=resolve(out,'source',relative(root,path)+'.txt');await mkdir(dirname(dest),{recursive:true});await copyFile(path,dest);}}}
for(const folder of ['src','tools','deploy'])await copySources(folder);
for(const file of ['README.md','compose.yaml','Dockerfile','package.json','LICENSE']){await mkdir(resolve(out,'source'),{recursive:true});await copyFile(file,resolve(out,'source',file+'.txt'));}
console.log('Built public workshop: local Bootstrap, app.js, real recording, sources.');
