package QA2aseManager;

use strict;
use warnings;


use DBI;
use lib qw(Core);
use Database;
use Configuration;
use LocalConfiguration;
use BO;
our @ISA = qw(BO);

sub new {
    my ($class) = @_;
    my $self = $class->SUPER::new("casp13.qa2_ase");
    bless $self, $class;
    return $self;
}

sub get_new_model{
    my ($self) = @_;
    my %model = (
	id => '',
	gr_code => '',
	gr_name => '',
	model => '',
	target => '',
	ts_model => '',
	ase => '',
    );
    return %model;
}

sub is_table_column {
    my ( $self, $column_name) = @_;
    my $result = 0;
    if ( $column_name eq 'id' ||
	 $column_name eq 'gr_name' ||
	 $column_name eq 'gr_code' ||
	 $column_name eq 'model' ||
	 $column_name eq 'target' ||
	 $column_name eq 'ts_model' ||
         $column_name eq 'ase' 
	 ) {
	$result = 1;
    } 
    return $result;
}

sub exist_by_parameters {
    my ($self, %model) = @_;
    my $result = 0;
    my $query = sprintf(" SELECT id FROM %s 
	WHERE gr_code=\'%s\' AND model=%d AND ts_model=\'%s\' 
	", $self->{_table}, $model{gr_code}, $model{model}, $model{ts_model}
	);
    my $sth = $self->{_database}->query($query);
    # print "EXIST SQL: " . $query ."\n";    
    if(defined($sth) && ($sth->rows() > 0)) {
        my ($id) = $sth->fetchrow_array();
        $result = $id;
    }
    return $result;
}

sub get_avg_results{
    my ($self, $params) = @_;
    my $mod = 2;
    if (defined($params->{model}) && $params->{model} == 1){
	$mod = 1;
    }
    my $where = " WHERE model=$mod ";
    if (defined($params->{target}) && $params->{target} =~ m/^T/ ){
	$where .= sprintf(" AND target=\'%s\'", $params->{target});
    }
    my $query = " SELECT gr_name, gr_code, model,  
		avg(ase) as ase
		FROM casp13.qa2_ase 
		$where
		GROUP BY gr_name, gr_code, model
		ORDER BY ase DESC";

    my $sth = $self->{_database}->query($query);
    my @results = ();
    if(defined($sth) && ($sth->rows() > 0)) {
	my $index= 1;
	while(my ($gr_name, $gr_code, $model, 
		$ase
		) = $sth->fetchrow_array()){
		push @results, {
			INDEX => $index, 
			GR_NAME => $gr_name,
			GR_MODEL => sprintf("QA%03d_%d",  $gr_code, $model),
			ASE => (defined($ase) ? sprintf("%.3f", $ase): '-'),
		};
		$index++;
	}
    }
    return @results;
}

sub get_targets{
    my ($self) = @_;
    my @results = ();
    my $query = "SELECT DISTINCT target FROM casp13.qa2_ase ORDER BY target";
    my $sth = $self->{_database}->query($query);
    if(defined($sth) && ($sth->rows() > 0)) {
	while(my ($target) = $sth->fetchrow_array()){
		push @results, {
			_TARGET => $target
		};
	}
    }
    return @results;
}

1;
