<?php

require_once __DIR__ . '/base.php';

function process_html($s) {
	$pattern = '/<!--(.*)-->/Uis';
	$s = preg_replace($pattern, '', $s);

	$pattern = '/(?:(?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:(?<!\:|\\\|\'|\")\/\/.*))/';
	$s = preg_replace($pattern, '', $s);

	$pattern = '/\s+/s';
	$s = preg_replace($pattern, ' ', $s);
	return $s;
}

$no_tpl_files = ['help', 'cfg_wifi_conn'];

$dest = __DIR__ . '/out/';

ob_start();
foreach($_pages as $_k => $p) {
	if ($p->bodyclass == 'api') {
		if (ESP_DEMO) {
			echo "Generating: ~$_k.html (bounce)\n";

			if ($_k=='index') {
				$s = "<!DOCTYPE HTML><meta http-equiv=\"refresh\" content=\"0;url=term.html\">";
			}
			else {
				$s = "<!DOCTYPE HTML>
			<script>
				var ref = document.referrer;
				var qat = document.referrer.indexOf('?');
				if (qat !== -1) ref = ref.substring(0, qat)
				location.href=ref+'?msg=Request ignored, this is a demo.';
			</script>";
			}


		} else {
			continue;
		}
	} else {
		echo "Generating: $_k ($p->title)\n";

		$_GET['page'] = $_k;
		ob_flush();                                   // print the message
		ob_clean();                                   // clean up
		include(__DIR__ . '/index.php');
		$s = ob_get_contents();                       // grab the output

		// remove newlines and comments
		// as tests have shown, it saves just a couple kilobytes,
		// making it not a very big improvement at the expense of ugly html.
		//	$s = process_html($s);
		ob_clean();
	}

	$outputPath = $dest . $_k . ((in_array($_k, $no_tpl_files)||ESP_DEMO) ? '.html' : '.tpl');

	if (file_exists($outputPath)) unlink($outputPath);
	if (ESP_PROD) {
		$tmpfile = tempnam('/tmp', 'espterm').'.html';
		file_put_contents($tmpfile, $s);
		system('npm run html-minifier --'.
			' --remove-optional-tags'.
			' --remove-script-type-attributes'.
			' --remove-style-link-type-attributes'.
			' --remove-comments'.
			' --collapse-whitespace'.
			' --collapse-boolean-attributes'.
			' --html5'.
			' --max-line-length 120'.
			' -o '.escapeshellarg($outputPath).
			' '.escapeshellarg($tmpfile), $rv);

		// fallback if minify is not installed
		if (!file_exists($outputPath)) file_put_contents($outputPath, $s);
	} else {
		file_put_contents($outputPath, $s);
	}
}

ob_flush();