<?php
function createMapping($db, $mapFunction, $saveConfig = FALSE) {
	$mapping = [];
	foreach($db->getAll() as $vehicle) {
		$mapping[$vehicle['id']] = $mapFunction($vehicle['num']);
	}
	
	if($saveConfig) {
		$json = json_encode($mapping);
		if(!file_put_contents($saveConfig['result_temp'], $json)) {
			throw new Exception('Result save failed');
		}
		rename($saveConfig['result_temp'], $saveConfig['result']);
	}
	
	return $mapping;
}

function createVehiclesList($trips, $mapping, $saveConfig = FALSE) {
	$lines = [];
	foreach($trips as $trip) {
		$lines[$trip['line']][] = [
			'trip' => $trip,
			'vehicle' => $mapping[$trip['id']] ?? [],
		];
	}
	foreach($lines as &$line) {
		usort($line, function($a, $b) {
			return (substr($a['vehicle']['num'] ?? '', 2) <=> substr($b['vehicle']['num'] ?? '', 2)); 
		});
	}
	unset($line);
	ksort($lines);
	
	if($saveConfig) {
		$twigLoader = new \Twig\Loader\FilesystemLoader(__DIR__.'/../templates');
		$twig = new \Twig\Environment($twigLoader);
		
		$vehiclesHtml = $twig->render('vehicles.html', [
			'lines' => $lines,
			'prefix' => $saveConfig['prefix'],
		]);
		if(!file_put_contents($saveConfig['result_vehicles_temp'], $vehiclesHtml)) {
			throw new Exception('Vehicles save failed');
		}
		rename($saveConfig['result_vehicles_temp'], $saveConfig['result_vehicles']);
	}
	
	return $lines;
}