package EMAEstimateUploadManager;

use strict;
use warnings;

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

use Database;

use Configuration;
use LocalConfiguration;

use EMAEstimateManager;

my $DEBUG = 1;

my $upload_manager = undef;

my $MODEL_FORMAT = "(C\\S+)(TS\|QA)(\\d{3})_(\\d{1})";

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


sub parseModelName {
    my ($self, $modelname) = @_;
    my $target = undef;
    my $gr_code = undef;
    my $model = undef;
    if ($modelname =~ m/$MODEL_FORMAT/){
	$target = $1;
	$gr_code = $3;
	$model = $4;
    }
    return ($target, $gr_code, $model);
}


sub load{
    my ($self, $file, $dir) = @_;
    my $infile = sprintf("%s/%s", $dir, $file);
    my ($target, $qa_gr_code, $qa_model) = $self->parseModelName($file);
    my $manager = new EMAEstimateManager();
    my @cases;
    if (open IN, "< $infile") {
	while (my $l = <IN>){
		if($l =~ m/END/){next;}
		chomp $l;
		if ($l =~ m/^$MODEL_FORMAT/){
			push @cases, $l;
			next;
		} else {
			if( scalar(@cases)>0){
				$cases[$#cases] .= " ".$l;
			}
		}
	}
	close (IN);
        foreach my $c (@cases){
		my %model = $manager->get_new_model();
		$model{target} = $target;
		$model{gr_code} = $qa_gr_code;
		$model{model} = $qa_model;
		my @tokens = split(/\s+/, $c);
		$model{ts_model} = $tokens[0];
		$model{mqas} = $tokens[1];
		$model{distances} = '';
		for( my $i=2; $i<scalar(@tokens); $i++){
			$model{distances} .= sprintf("%d:%s ", ($i-1), $tokens[$i]);
		}
		$model{distances} =~ s/\s+$//;
		my $qa_id = $manager->get_qa_predictions_id(%model);
		if(defined($qa_id) && $qa_id > 0){
			$model{qa_predictions_id} = $qa_id;
		}
		my $ts_id = $manager->get_ts_predictions_id(%model);
		if(defined($ts_id) && $ts_id > 0){
			$model{ts_predictions_id} = $ts_id;
		}
		my $id = $manager->exist_by_parameters(%model);
		
		if( defined($id)){
			if($id > 0){
				$model{id} = $id;
				$manager->update(%model);
			} elsif ($id == 0){
				$manager->add(%model);
			}
		}
		#last;
        }
    } else {
       warn "Couldn't open file $infile\n";
    }
}

1;
