#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

# constanten
my $yasaraBin = "/usr/local/twinset/yasara/yasara";
my $zipBin = "/usr/bin/zip";

my $q = new CGI;

my $script = $q->param('script')
	or die "No script specified!\n";
my $arguments = $q->param('arguments')
	or die "No arguments specified!\n";
my $pdb = $q->param('pdb')
	or die "No pdb file included!\n";

my $tmpDir = "/tmp/yasara-tmp-$$";

mkdir($tmpDir)
	or die "Could not create temporary directory\n";

chdir($tmpDir)
	or die "Could not change to temporary directory\n";

# write out yasara script
my $fh;
open($fh, ">yasara-input-script.mcr")
	or die "Could not create yasara script";
print $fh $script;
close($fh);

# write out pdb file
my $fh;
open($fh, ">pdbfile.pdb")
	or die "Could not create pdb file";
print $fh $pdb;
close($fh);

# open een log file voor de executables:

my $log;
open($log, ">yasara-cgi.log");
print $log "$yasaraBin -txt ./yasara-input-script.mcr \"pdb='pdbfile.pdb'\" $arguments\n\n";

# voer yasara uit

open($fh, "$yasaraBin -txt ./yasara-input-script.mcr \"pdb='pdbfile.pdb'\" $arguments|")
	or die "Could not launch yasara";
while (my $line = <$fh>) {
	print $log $line;
}
close($fh);

# einde daarvan

chdir("/tmp");

print $log "\n\n$zipBin results-$$.zip yasara-tmp-$$/*.png yasara-tmp-$$/*.gif\n\n";
open($fh, "$zipBin results-$$.zip yasara-tmp-$$/*.png yasara-tmp-$$/*.gif|")
	or die "Could not execute zip to pack results";
while (my $line = <$fh>) {
	print $log $line;
}
close($fh);

#system("rm -rf $tmpDir");

close($log);

print
	$q->header(-type=>'application/zip');

open($fh, "<results-$$.zip")
	or die "Could not open results file";

binmode($fh);
binmode(STDOUT);

my $buffer;
while (my $r = read($fh, $buffer, 1024)) {
	print STDOUT $buffer;
}

#unlink("results-$$.zip");
