module main

import benchmark
import sim
import sim.args as simargs
import sim.img

fn main() {
	args := simargs.parse_args(sequential: true)? as simargs.SequentialArgs

	mut bmark := benchmark.start()
	defer {
		bmark.measure(@FN)
	}

	mut writer := img.ppm_writer_for_fname(args.filename, img.image_settings_from_grid(args.grid))?
	defer {
		writer.close()
	}

	handle_request := fn [mut writer] (request &sim.SimRequest) ? {
		result := sim.compute_result(request)
		pixel := img.compute_pixel(result)
		return writer.handle_pixel(pixel)
	}

	sim.run(args.params, grid: args.grid, on_request: sim.SimRequestHandler(handle_request))

	writer.write()?
}