package EvaluationResult;

my %SCORES;

my $FILENAMES_REGEXP = {
        _filename_format => "^(.{5})(.{2})(.{3})_(.{1})",
        _filename_parent_format => "^(.{5})(.{2})(.{3})_(.{1})_(.{1})",
        _filename_parent_domain_format => "^(.{5})(.{2})(.{3})_(.{1})_(.{1})-D([1-9]+)",
        _filename_domain_format => "^(.{5})(.{2})(.{3})_(.{1})-D([1-9]+)"
};



# class constructor
sub new {
    my ($class, $file) = @_;
    my $self = {
	# groups of variables, that in unique way identify a prediction
	_target => undef,
	_domain => undef,
	_pfrmat => undef,
	_gr_code => undef,
	_model => undef,
	_parent => undef,
	_scores => %SCORES 
	};
     bless $self, $class;
     if (defined($file)){
	$self->parseFileName($file);
     }
     return $self;
}

sub parseFileName{
    my ($self, $file) = @_;
    if ($file =~ m/$FILENAMES_REGEXP->{_filename_parent_domain_format}/){
                $self->{_target} = $1;
                $self->{_pfrmat} = $2;
                $self->{_gr_code} = $3;
                $self->{_model} = $4;
                $self->{_parent} = $5;
                $self->{_domain} = $6;
    } elsif ($file =~ m/$FILENAMES_REGEXP->{_filename_domain_format}/) {
                $self->{_target} = $1;
                $self->{_pfrmat} = $2;
                $self->{_gr_code} = $3;
                $self->{_model} = $4;
                $self->{_domain} = $5;
    } elsif ($file =~ m/$FILENAMES_REGEXP->{_filename_parent_format}/){
                $self->{_target} = $1;
                $self->{_pfrmat} = $2;
                $self->{_gr_code} = $3;
                $self->{_model} = $4;
                $self->{_parent} = $5;
    } elsif ($file =~ m/$FILENAMES_REGEXP->{_filename_format}/){
                $self->{_target} = $1;
                $self->{_pfrmat} = $2;
                $self->{_gr_code} = $3;
                $self->{_model} = $4;
    }
    if (!defined($self->{_target}) || 
	!defined($self->{_pfrmat}) ||
	!defined($self->{_gr_code}) ||
	!defined($self->{_model})
	){
	die "File name $file was not parsed correctly\n";
    }
}

sub createModelName{
    my ($self) = @_;
    my $result ;
    if (defined ($self->{_target}) &&
        defined ($self->{_pfrmat}) &&
        defined ($self->{_gr_code}) &&
        defined ($self->{_model})
    ) {
        $result = sprintf("%s%s%03d_%d", $self->{_target}, $self->{_pfrmat}, $self->{_gr_code}, $self->{_model});
    }

    if (defined($self->{_parent})){
        $result .= sprintf("_%d", $self->{_parent});
    }

    if (defined($self->{_domain})){
        $result .= sprintf("-D%d", $self->{_domain});
    }
    return $result;
}

sub createTargetName{
    my ($self) = @_;
    my $result;
    if (defined ($self->{_target})){
        $result  = sprintf("%s", $self->{_target});
    }
    if (defined($self->{_domain})){
        $result .= sprintf("-D%d", $self->{_domain});
    }
    return $result;
}

sub createPredictionID{
    my ($self) = @_;
    my $result;
    if (defined ($self->{_pfrmat}) &&
        defined ($self->{_gr_code}) &&
        defined ($self->{_model})
    ) {
        $result = sprintf("%s%03d_%d", $self->{_pfrmat}, $self->{_gr_code}, $self->{_model});
    }
    if (defined($self->{_parent})){
        $result .= sprintf("_%d", $self->{_parent});
    }
    return $result;

}


1;
