#!/usr/bin/php

<?php

/*
Copyright (C) 2015-2016 Parallel Realities

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/

$UPDATE_FILES = false;

function cleanHeader($headerFile)
{
	global $UPDATE_FILES;

	$func_pattern = "/(([A-Z0-9_]+)\\()/i";
	$struct_pattern = "/([A-Z]+);/i";

	$bodyFile = $headerFile;
	$bodyFile[strlen($bodyFile) - 1] = 'c';
	
	if (file_exists($bodyFile))
	{
		$header = file($headerFile);
		$body = file_get_contents($bodyFile);
	
		$i = 0;
		$hasChanges = false;
		
		foreach ($header as $line)
		{
			if (strstr($line, "extern") !== FALSE && strstr($line, "getTranslatedString") === FALSE)
			{
				preg_match($func_pattern, $line, $matches);

				if (count($matches) == 3)
				{
					$extern = $matches[2];
				
					if (strstr($body, $extern) === FALSE)
					{
						if (!$hasChanges)
						{
							echo "$headerFile\n";
							$hasChanges = true;
						}
						echo "\t- $line";
						unset($header[$i]);
					}
				}
				
				preg_match($struct_pattern, $line, $matches);

				if (count($matches) == 2)
				{
					$extern = $matches[1];
					
					if (strstr($body, "$extern") === FALSE)
					{
						if (!$hasChanges)
						{
							echo "$headerFile\n";
							$hasChanges = true;
						}
						echo "\t- $line";
						unset($header[$i]);
					}
				}
			}
			
			$i++;
		}
		
		if ($UPDATE_FILES && $hasChanges)
		{
			file_put_contents($headerFile, $header);
		}
	}
}

function recurseDir($dir)
{
	$files = array_diff(scandir($dir), array('..', '.'));
	
	foreach ($files as $file)
	{
		if (is_dir("$dir/$file"))
		{
			recurseDir("$dir/$file");
		}
		else if (strstr($file, ".h") !== FALSE)
		{
			cleanHeader("$dir/$file");
		}
	}
}

if (isset($argv[1]))
{
	$UPDATE_FILES = ($argv[1] == "-commit");
}

recurseDir("../src");

if (!$UPDATE_FILES)
{
	echo "\nNo files updated. Use -commit to update headers\n";
}

?>