import sassPlugin from "@alecodes/bun-plugin-sass";
import { parseArgs } from "node:util";
import path from "node:path";

const { values } = parseArgs({
	args: Bun.argv,
	options: {
		globs: {
			type: "string",
			short: "g",
		},
		outdir: {
			type: "string",
			short: "o",
		},
		bundle_name: {
			type: "string",
			short: "n",
			default: "main",
		},
	},
	strict: true,
	allowPositionals: true,
});

if (values.globs === undefined || values.outdir === undefined) {
	throw new Error("Error in the arguments provided.");
}

console.log(`Building glob "${values.globs}" to "${values.outdir}"`);

// parseArgs should throw an error if a property doesn't exist when strict = true
const entrypoints = Array.from(new Bun.Glob(values.globs).scanSync("."));

const result = await Bun.build({
	entrypoints,
	publicPath: "/",
	// splitting: true,
	plugins: [sassPlugin],
	minify: {
		whitespace: true,
		identifiers: true,
		syntax: true,
	},
	naming: {
		entry: "[dir]/[name].[ext]",
		chunk: "assets/[name]-[hash].[ext]",
		asset: "assets/[name]-[hash].[ext]",
	},
});

let out = "";
out += "|env: &mut minijinja::Environment| {\n";

for (const res of result.outputs) {
	// Can be consumed as blobs
	let asset_text = await res.bytes();
	const asset_path = path.normalize(res.path);
	out += `env.add_template("${asset_path}", "${asset_text}").expect("Embedded an invalid template");\n`;
}

out += "}";

Bun.write(
	path.join(values.outdir, `minijinja_templates_${values.bundle_name}.rs`),
	out,
);

console.log("Assets compiled!");
