#!/usr/bin/perl
my $target = $ARGV[2];
my $pkg = $ARGV[0];

###################################################################################
my $ALERT = "$ARGV[0]/Contents/Resources/Alert.app/Contents/MacOS/Alert";
my $SENDER = "$ARGV[0]/Contents/Resources/SlimSender";
my $APP = "Aperture";
my $APP_IS_RUNNING = 0;
my $APP_RUNNING_CURRENT_USER = 0;
my $APP_RUNNING_OTHER_USER = 0;
###################################################################################

my @switchedPIDs = ();
my @activePIDs = ();

# abort if alert is unavailable
if (! -e $ALERT) {
	exit(1);
}

# retrieve Aperture PIDs, if any
my $PROC = `/usr/bin/killall -dc "$APP" 2> /dev/null`;
if (($? >> 8) != 0) {
	exit(0);
}

# get current user ID
my $currentUID = `/usr/bin/id -u "$ENV{USER}"`;
if (($? >> 8) != 0) {
	$currentUID = -1;
}
chomp $currentUID;

# try to close any switched Aperture PIDs
my @PROCS = split(/\n/, $PROC);
foreach (@PROCS) {
	if (! -e $SENDER) {
		last;
	}
	if ($_ =~ m/sig:.+cmd:$APP.+pid:([0-9]+).+dev:.+uid:([0-9]+)/) {
		my $pid = $1;
		my $processUID = $2;
		if ($processUID != $currentUID) {
			print "Attempting to close Aperture PID $pid\n";
			#`"$SENDER" -p $pid -e aevtquit`;
			system("$SENDER", "-p", "$pid", "-e", "aevtquit");
			sleep(3);	
		}
	}
	else {
		next;
	}
}

# retrieve Aperture PIDs (again), if any
$PROC = `/usr/bin/killall -dc "$APP" 2> /dev/null`;
if (($? >> 8) != 0) {
	exit(0);
}
$APP_IS_RUNNING = 1;

while ($APP_IS_RUNNING == 1) {

	# classify Aperture PIDs as running under active user or switched user
	@switchedPIDs = ();
	@activePIDs = ();
	my @PROCS = split(/\n/, $PROC);
	foreach (@PROCS) {
		if ($_ =~ m/sig:.+cmd:$APP.+pid:([0-9]+).+dev:.+uid:([0-9]+)/) {
			my $pid = $1;
			my $processUID = $2;
			if ($processUID == $currentUID) {
				push(@activePIDs, $pid);
				$APP_RUNNING_CURRENT_USER = 1;
			}
			else {
				push(@switchedPIDs, $pid);
				$APP_RUNNING_OTHER_USER = 1;
			}
		}
		else {
			next;
		}
	}

	# current user message has priority over other user message
	if ($APP_RUNNING_CURRENT_USER) {
		$ENV{'ALERT_APP_ACTION'} = "AppRunning";
	}
	elsif ($APP_RUNNING_OTHER_USER) {
		$ENV{'ALERT_APP_ACTION'} = "AppRunningOtherUser";
	}
	else {
		$ENV{'ALERT_APP_ACTION'} = "AppRunning";
	}

	#`/usr/bin/su $ENV{USER} -c "$ALERT"`;
	system ("/usr/bin/su", $ENV{USER}, "-c", "\"$ALERT\"");
	
	# terminate if there is no SWU or Installer process for the active user
	`/usr/bin/killall -u $ENV{USER} -s "Software Update" 2> /dev/null`;
	if (($? >> 8) != 0) {
		`/usr/bin/killall -u $ENV{USER} -s "Installer" 2> /dev/null`;
		if (($? >> 8) != 0) {
			exit(0);
		}
	}
	
	# reset for next loop iteration
	$APP_RUNNING_CURRENT_USER = 0;
	$APP_RUNNING_OTHER_USER = 0;
	
	$PROC = `/usr/bin/killall -dc "Aperture" 2> /dev/null`;
	$APP_IS_RUNNING = !($? >> 8);
}

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/Autostack.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/ExportBookProgress.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/FirstStart.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/MetadataSetEditor.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/SampleProjectImportProgress.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/WebManager.nib\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/ProSplash.psd\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/version.plist\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/B_HUD_Block1.png\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/B_HUD_Block2.png\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/B_HUD_Block3.png\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/B_HUD_Lower.png\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/B_HUD_Over.png\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/ProSplash.psd\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Frameworks/DotMacKit.framework/PrivateHeaders\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Frameworks/DotMacKit.framework/Versions/A/PrivateHeaders\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Frameworks/DotMacKit.framework/Versions/Current/PrivateHeaders\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/AutoLevels.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/BilateralFilter.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/ColorCastCorrection.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/GaussianPen.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/HotPixelKernel.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/LevelsKernel.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/PatchingKernel.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/RedEyeKernel.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/ShadowHighlight.cikernel\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/SpottingKernel.cikernel\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/English.lproj/Help/Frequently Asked Questions.pdf\" >/dev/null 2>&1`;
`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/English.lproj/Presets.nib\" >/dev/null 2>&1`;

`/bin/rm -Rf \"$target/Applications/Aperture.app/Contents/Resources/English.lproj/WebThemes\" >/dev/null 2>&1`;

exit(0);