import fs, {cpSync, readdirSync} from 'node:fs';
import path from 'node:path';
import {BundlerInternals} from '@remotion/bundler';
import {dir} from '@remotion/compositor-linux-arm64-gnu';
import {$} from 'bun';
import {FUNCTION_ZIP_ARM64} from './src/shared/function-zip-path';

const outdir = path.join(__dirname, `build-render`);
fs.mkdirSync(outdir, {
	recursive: true,
});
const outfile = path.join(outdir, 'index.js');

fs.rmSync(outdir, {recursive: true});
fs.mkdirSync(outdir, {recursive: true});
const template = require.resolve(
	path.join(__dirname, 'dist', 'functions', 'index'),
);

await BundlerInternals.esbuild.build({
	platform: 'node',
	target: 'node16',
	bundle: true,
	outfile,
	minify: true,
	legalComments: 'none',
	entryPoints: [template],
	treeShaking: true,
	external: [],
});

const filesInCwd = readdirSync(dir);
const filesToCopy = filesInCwd.filter(
	(f) =>
		f.startsWith('remotion') ||
		f.endsWith('.so') ||
		f.endsWith('.dll') ||
		f.endsWith('.dylib') ||
		f.startsWith('ffmpeg') ||
		f.startsWith('ffprobe'),
);
for (const file of filesToCopy) {
	cpSync(path.join(dir, file), path.join(outdir, file));
}

fs.cpSync(
	path.join(
		__dirname,
		'..',
		'renderer',
		'node_modules',
		'source-map',
		'lib',
		'mappings.wasm',
	),
	`${outdir}/mappings.wasm`,
);

await $`cd ${outdir} && zip -r ${path.resolve(FUNCTION_ZIP_ARM64)} .`;

fs.rmSync(outdir, {recursive: true});
console.log('Bundled Lambda');
