#!/usr/bin/perl
use strict;
use warnings;

use Getopt::Long;
use Switch;

use lib qw(Core);
use lib qw(Classes);

use LocalConfiguration;

use MultimerResultsManager;
use MultimerResultsUploadManager;


my $casp_version = uc($LOCAL_CONFIG->{CASP_VERSION});
my $RESULT_DIR = "/local/$casp_version/RESULTS/";

my $results_manager = new MultimerResultsManager();
my $resultsupload_manager = new MultimerResultsUploadManager();
my $target_names = "";
my $actions;
my $TARGET ;

# read arguments
GetOptions(
	"targets=s" => \$target_names,
	"actions=s" => \$actions,
);

sub upload_AssemblyAlignment {
    my $dir = "$RESULT_DIR/AA" ;
    my $file = "$TARGET.aa";
    $resultsupload_manager->load_AssemblyAlignment($file, $dir);
}

sub upload_AssemblyProperties {
    my $dir = "$RESULT_DIR/AP" ;
    my $file = "$TARGET.ap";
    $resultsupload_manager->load_AssemblyProperties($file, $dir);
}

sub upload_QSscore {
    my $dir = "$RESULT_DIR/QSscore" ;
    my $file = "$TARGET.qsscore";
    $resultsupload_manager->load_QSscore($file, $dir);
}

sub upload_cont_clash {
    my $dir = "$RESULT_DIR/oligo_cont_clash" ;
    my $file = "$TARGET.cont_clash";
    $resultsupload_manager->load_cont_clash($file, $dir);
}

sub upload_interfaces {
    my $dir = "$RESULT_DIR/interfaces" ;
    my $file = "$TARGET.scores_AB_iface-match";
    $resultsupload_manager->load_Interface($file, $dir);
}

sub upload_oligoModels{
    my $dir = "/local/$casp_version/predictions/cleaned/$TARGET" ;
    my @files = ();
    if (opendir(D, "$dir")) {
	while(defined(my $f = readdir(D))){
		push @files, $f unless $f=~ m/^\./ ;
	}
	closedir(D);
	@files = sort @files;
	foreach my $f (@files){
		$resultsupload_manager->load_OligoModels($f, $dir);
	}
    }
}


sub run {
	my ($target_name) = @_;
	$TARGET = $target_name;

	printf "\n\n===== target: %8s =========\n", $TARGET;

	for my $action (split(',', $actions)) {
		printf "\n\n===== target: %8s action: %s =========\n", $TARGET, $action;
		switch ($action) {
		case 'aa' { upload_AssemblyAlignment(); } 
		case 'ap' { upload_AssemblyProperties(); }
		case 'iface' { upload_interfaces(); }
		case 'qs' { upload_QSscore(); }
		case 'om' { upload_oligoModels(); }
		case 'cont_clash' { upload_cont_clash();} 
		}
	}

}

for my $target (split(',', $target_names)) {
	run($target);
}

exit(0);
1;
