package QAaucmccUploadManager;

use strict;
use warnings;

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

use Database;

use Configuration;
use LocalConfiguration;

use QAaucmccManager;

my $upload_manager = undef;

my $MODEL_FORMAT = "stage(\\d{1})";
my $SCORE_FORMAT = "_(gdt|cadss|cadaa|sg|lddt)[_-]";

sub new {
    my ($class) = @_;
    return $upload_manager if (defined($upload_manager));
    my $self = { };
    $upload_manager = bless $self, $class;
    return $upload_manager;    
}


sub parseDirName {
    my ($self, $dirname) = @_;
    my $model = undef;
    my $score = undef;
    if ($dirname =~ m/$MODEL_FORMAT/){
	my $m = $1;
	$model = $m;
    }
    if ($dirname =~ m/$SCORE_FORMAT/) {
	$score = $1;
	if ($score =~ m/gdt/) {
	    $score = 'gdt_ts';
	} elsif ($score =~ m/cadss/){
	   $score = 'cad_ss';
	} elsif ($score =~ m/cadaa/){
           $score = 'cad_aa';
        } elsif ($score =~ m/lddt/){
           $score = 'lddt';
        } elsif ($score =~ m/sg/){
           $score = 'sg';
        }
    }
    return ($model, $score);
}


sub load_mcc{
    my ($self, $file, $dir) = @_;
    my $infile = sprintf("%s/%s", $dir, $file);
    my ($mod, $score) = $self->parseDirName($dir);
    my $manager = new QAaucmccManager();
    if (open IN, "< $infile") {
	my $flag = 0; # skip header
	while (my $l = <IN>){
		if ($l =~ m/^#----/ ){$flag = 1; next;}
		if ($flag == 0){next;}
		my %model = $manager->get_new_model();
		$model{model} = $mod;
		# QA_grp TargCount       NumbTSPred      TP50    FP50    TN50    FN50    ACC50   MCC50   TP40    FP40    TN40    FN40    ACC40   MCC40
		# Davis-EMAconsensus         71     1400       0       0    1281     119   0.915   0.000       0       0     847     553   0.605   0.000
		my @tokens = split(/\s+/, $l);
		$model{gr_name} = $tokens[0];
		$model{"$score"."_mcc50"} = $tokens[8];
		$model{"$score"."_mcc40"} = $tokens[14];
		my $id = $manager->exist_by_parameters(%model);
		if (defined($id) && $id > 0){
			$model{id} = $id;
			$manager->update(%model);
		} else {
			$manager->add(%model);
		}
	}
	close (IN);
    } else {
       warn "Couldn't open file $infile\n";
    }

}

sub load_auc {
    my ($self, $file, $dir) = @_;
    my $infile = sprintf("%s/%s", $dir, $file);
    my ($mod, $score) = $self->parseDirName($dir);
    my $manager = new QAaucmccManager();
    if (open IN, "< $infile") {
        my $l = <IN>; # skip header
        while ($l = <IN>){
		chomp $l;
                if ($l =~ m/^$/ ){last;}
                my %model = $manager->get_new_model();
                $model{model} = $mod;
                # Group   cadaa_AUC_ROC
		# ModFOLD6_rank   0.9256
                my @tokens = split(/\s+/, $l);
                $model{gr_name} = $tokens[0];
                $model{"$score"."_auc"} = $tokens[1];
                my $id = $manager->exist_by_parameters(%model);
                if (defined($id) && $id > 0){
                        $model{id} = $id;
                        $manager->update(%model);
                } else {
                        $manager->add(%model);
                }
        }
        close (IN);
    } else {
       warn "Couldn't open file $infile\n";
    }
}

1;
