#!/usr/bin/perl
use strict;
use warnings;
use File::stat;
use Time::localtime;

# Constants
my $VERSION = "1.0.0";
my $LOCALVERSIONFILE = "$ENV{HOME}/curversion.txt";
my $MOBIUS_BIN = "mobius-hotline-server";
my $LOCALMOBIUS = "$ENV{HOME}/mobius/$MOBIUS_BIN";
my $MOBIUSFOLDER = "$ENV{HOME}/mobius";
my $LOCALMD5 = "";
my $MASTER_FILE = "latestmobius.txt";
my $RELEASED_VERSION_FILE = "https://hotline.retro-os.live/$MASTER_FILE";
my $RELEASED_BINARY_FILE = "https://hotline.retro-os.live/$MOBIUS_BIN";
my $WGET_COMMAND = "/usr/bin/wget --timestamping";
my $MASTERMD5 = "";
my $MD5SUM = "/usr/bin/md5sum -b";
my $INPUT_FILE = "";

# Locals

sub GetLocalVersion
{
	system("$MD5SUM $LOCALMOBIUS > /tmp/md5sum");
	open my $INPUT_FILE, "</tmp/md5sum"  || die "Can't open /tmp/md5sum: $!\n";
	while (<$INPUT_FILE>)
	{
		($LOCALMD5, my $foo) = split(" ", $_);
	}
        close ($INPUT_FILE);
	# print "Digest is '$LOCALMD5'\n";
}

sub SetLocalVersion
{
	open my $OUTPUT_FILE, ">$LOCALVERSIONFILE"  || die "Can't open $LOCALVERSIONFILE: $!\n";
	print ($OUTPUT_FILE "$LOCALMD5\n");
	close ($OUTPUT_FILE);
}

sub GetMasterVersion
{
	# Download version for the master server
	chdir "/tmp";
	print "Getting master version:\n";
	system ("$WGET_COMMAND $RELEASED_VERSION_FILE > /dev/null 2>\&1");
	open my $INPUT_FILE, "<$MASTER_FILE"  || die "Can't open $MASTER_FILE: $!\n";

	while (<$INPUT_FILE>)
	{
		($MASTERMD5, my $foo) = split(" ", $_);
	}
        close ($INPUT_FILE);

	# print "Mtime is '$MASTERMD5'\n";
}

sub KillServer
{
        system("killall mobius-hotline-server");
}

sub DownloadMasterFile
{
	chdir ("/tmp");
	system ("$WGET_COMMAND $RELEASED_BINARY_FILE > /dev/null 2>\&1");
	#print "$WGET_COMMAND $RELEASED_BINARY_FILE\n";
	print "copying $MOBIUS_BIN to $MOBIUSFOLDER\n";
	system ("mv $MOBIUS_BIN $MOBIUSFOLDER");
	system ("chmod a+rx $MOBIUSFOLDER/$MOBIUS_BIN");

print "File Downloaded\n";
}

print "check4update v$VERSION\n";
print "====================\n";

GetLocalVersion();

if (! -f $LOCALVERSIONFILE)
{
	print "Local version file ($LOCALVERSIONFILE) does not exist - scanning existing file.\n";
	SetLocalVersion();
}
if ($LOCALMD5 eq "")
{
	print "MD5 was invalid\n";
	exit (1);
}

print "Checking master mobius:\n";

GetMasterVersion();

if ($LOCALMD5 eq $MASTERMD5)
{
	print "Local version up to date\n";
	exit (0);
}
print "local ver = $LOCALMD5, master ver $MASTERMD5\n";
DownloadMasterFile();
KillServer();
exit (0);

