<?php

/**
 *
 * @copyright  2021-2022 mcpalo.com
 * @version    2
 * @link       http://www.mcpalo.com
 */

define('USAGE', 'php -f %s dir file.csv');

function abort($msg, $code=1) {
	echo $msg, PHP_EOL;
	exit($code);
}

function usage() {
	global $argv;

	abort(sprintf(USAGE, basename($argv[0])), 1);
}

if ($argc != 3) {
	usage();
}

$dir=$argv[1];
$csv=$argv[2];

define('LOGIN', 'abcdef');
define('PASSWORD', 'ABCDEF');

define('DELIMITER', ',');
define('ENCLOSURE', '"');
define('ESCAPE', '\\');

define('URL', 'https://tesseractor.com/api/v1/scancode' . '?' . 'login=' . urlencode(LOGIN) . '&' . 'password=' . urlencode(PASSWORD));

define('SCANCODE', 'curl -s --fail --show-error -X POST "' . URL . '" -F "file=@%s" %s -o -');

$passes=array(
	'YOLO_0_IMAGES_1'				=> '-F "yolo=0" -F "images=1"',
//	'YOLO_1_IMAGES_1'				=> '-F "yolo=1" -F "images=1"',
//	'YOLO_0_IMAGES_1_RESIZE_150'	=> '-F "yolo=0" -F "images=1" -F "resize=150"',
//	'YOLO_0_DPI_125'				=> '-F "yolo=0" -F "resolution=125"',
);

$filelist=@scandir($dir, SCANDIR_SORT_NONE);

if (!$filelist) {
	abort($dir . '?');
}

sort($filelist, SORT_NATURAL);

$csvout = @fopen($csv, 'w');

if ($csvout === false) {
	abort($csv . '?');
}

$headline=array(false);

foreach ($passes as $label => $arg) {
	$headline[]=$label;
	$headline[]='';	// count
	$headline[]='';	// secs
}

if (fputcsv($csvout, $headline, DELIMITER, ENCLOSURE, ESCAPE) === false) {
	abort($csv . '?');
}

foreach ($filelist as $file) {
	if ($file == '.' || $file == '..')
		continue;

	echo $file, PHP_EOL;

	$line=array($file);

	foreach ($passes as $label => $arg) {
		$cmdline=sprintf(SCANCODE, $dir . DIRECTORY_SEPARATOR . $file, $arg);

		$output=false;

		$stime=microtime(true);

		@exec($cmdline, $output, $ret);

		$etime=microtime(true);

		$line[]=$ret == 0 && $output ? implode("\n", $output) : false;
		$line[]=$ret == 0 && $output ? count($output) : 0;
		$line[]=$ret == 0 ? sprintf('%0.2f', round($etime-$stime, 2)) : false;
	}

	if (fputcsv($csvout, $line, DELIMITER, ENCLOSURE, ESCAPE) === false) {
		abort($csv . '?');
	}
}

exit(0);
