#!/usr/bin/env perl
use HTML::Entities;
use Cwd 'realpath';
use utf8;

sub trim;
$debug = true;
if ($#ARGV == -1) {
	print ("STANDALONE USE TO BE IMPLEMENTED\n");
	exit;
}
if ($ARGV[1] eq "q") {
	$debug = false;
}
$isCompile = substr $ARGV[0], rindex($ARGV[0] , '/');

$project = realpath($ARGV[0]);
$XML = "  <WorldTrigger name=\"%s\" script=\"%s\"></WorldTrigger>\r\n";

sub eaxssort () {

	if (substr ($a , 0, 1) eq "_" and substr ($a , 0, 2) ne "__" and substr ($b , 0, 2) eq "__") {

		return -1;
	}
	elsif (substr ($b , 0, 1) eq "_" and substr ($b, 0, 2) ne "__" and substr ($a , 0, 2) eq "__") {
		return 1;
	}
	else {
		lc($a) cmp lc($b);
	}
}

if ($isCompile eq "/triggers") {

	opendir (SCRIPTS, "$project/");
	@scripts = readdir (SCRIPTS); 
	close (SCRIPTS);

	open (TRIGGERLIST, "+>$project/../triggerlist");
	
	$header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<WorldTriggerList>\r\n";
	$footer = "</WorldTriggerList>\r\n";

	print TRIGGERLIST "$header";

	@scripts = sort eaxssort @scripts;
	join "\n", @scripts;

	foreach (@scripts) {

		$name = $_;
		if ($name ne "." and $name ne "..") {

			$name =~ s/\.s2s$//;

			open (SCRIPT , "$project/$_");
			@lines = <SCRIPT>;
			$buffer = join "", @lines;
			$buffer =~ s/\s+$//;
			close (SCRIPT);

			$code = "";
			if ($buffer ne "") {

				$code = encode_entities($buffer , "\r\n\"<>" . '&\\$');
			}
			else {
				$code = "";
			}
			undef $buffer;

			printf TRIGGERLIST $XML, $name, $code;

		}
	}

	print TRIGGERLIST $footer;
	close (TRIGGERLIST);

	exit;
}
else {
	print "[  ] Decompiling ...\n";
	$triggerlist = "$project/triggerlist";
	if (! -d "$project/triggers" ) {

		print "[!!] Creating $project/triggers/\n";
		system("mkdir $project/triggers/");
	}


	open (TRIGGERLIST , $triggerlist);
	while ($_ = <TRIGGERLIST>) {
		$_ = trim($_);
		if ($_ =~ m/^<WorldTrigger name="(\w+)" script="(.*)"><\/WorldTrigger>$/) {

			$script = $1;
			print "[**] Found: $script";

			open (SCRIPT , "+>$project/triggers/$script.s2s");

			if ($2 eq "") { 
				print " [EMPTY]\n"; 
			}
			else {
				$code = decode_entities($2);
	
				print SCRIPT "$code";
				print " [WRITTEN CODE]\n";
			}
			close (SCRIPT);
		}
	}
}
sub trim($) {
	my $string = shift;
	$string =~ s/^\s+//;
	$string =~ s/\s+$//;
	return $string;
}

