package QAaucmccManager;

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.qa_aucmcc");
    bless $self, $class;
    return $self;
}

sub get_new_model{
    my ($self) = @_;
    my %model = (
	id => '',
	gr_name => '',
	model => '',
	gdt_ts_mcc40 => '',
	gdt_ts_mcc50 => '',
	gdt_ts_auc => '',
	lddt_mcc40 => '',
        lddt_mcc50 => '',
        lddt_auc => '',
	cad_aa_mcc40 => '',
        cad_aa_mcc50 => '',
        cad_aa_auc => '',
	sg_mcc40 => '',
        sg_mcc50 => '',
        sg_auc => '',
    );
    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 'model' ||
	 $column_name eq 'gdt_ts_mcc40' ||
	 $column_name eq 'gdt_ts_mcc50' ||
	 $column_name eq 'gdt_ts_auc' ||
	 $column_name eq 'lddt_mcc40' ||
         $column_name eq 'lddt_mcc50' ||
         $column_name eq 'lddt_auc' ||
	 $column_name eq 'cad_aa_mcc40' ||
         $column_name eq 'cad_aa_mcc50' ||
         $column_name eq 'cad_aa_auc' ||
	 $column_name eq 'sg_mcc40' ||
         $column_name eq 'sg_mcc50' ||
         $column_name eq 'sg_auc' 
	 ) {
	$result = 1;
    } 
    return $result;
}

sub exist_by_parameters {
    my ($self, %model) = @_;
    my $result = 0;
    my $query = sprintf(" SELECT id FROM %s 
	WHERE gr_name=\'%s\' AND model=%d 
	", $self->{_table}, $model{gr_name}, $model{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_results{
    my ($self, $params) = @_;
    my $mod = 1;
    if (defined($params->{model}) && $params->{model} == 2 ){
	$mod = 2;
    }
    my $where = " WHERE qa.model=$mod AND g.code NOT IN (237) AND g.name NOT IN ('Davis-EMAconsensusAL') ";
    my $query = " SELECT qa.gr_name, g.code, qa.model, 
		gdt_ts_mcc40, gdt_ts_mcc50, gdt_ts_auc,
		lddt_mcc40, lddt_mcc50, lddt_auc,
		cad_aa_mcc40, cad_aa_mcc50, cad_aa_auc,
		sg_mcc40, sg_mcc50, sg_auc
		FROM casp13.qa_aucmcc qa 
		JOIN casp13.groups g ON g.name::text=qa.gr_name 
		$where
		ORDER BY gdt_ts_auc 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, 
		$gdt_ts_mcc40, $gdt_ts_mcc50, $gdt_ts_auc,
                $lddt_mcc40, $lddt_mcc50, $lddt_auc,
                $cad_aa_mcc40, $cad_aa_mcc50, $cad_aa_auc,
                $sg_mcc40, $sg_mcc50, $sg_auc
		) = $sth->fetchrow_array()){
		push @results, {
			INDEX => $index, 
			GR_NAME => $gr_name,
			GR_MODEL => sprintf("QA%03d_%d",  $gr_code, $model),

                        GDT_MCC40 => (defined($gdt_ts_mcc40) ? sprintf("%.3f", $gdt_ts_mcc40): '-'),
                        GDT_MCC50 => (defined($gdt_ts_mcc50) ? sprintf("%.3f", $gdt_ts_mcc50): '-'),
                        GDT_AUC => (defined($gdt_ts_auc) ? sprintf("%.3f", $gdt_ts_auc): '-'),

                        LDDT_MCC40 => (defined($lddt_mcc40) ? sprintf("%.3f", $lddt_mcc40): '-'),
                        LDDT_MCC50 => (defined($lddt_mcc50) ? sprintf("%.3f", $lddt_mcc50): '-'),
                        LDDT_AUC => (defined($lddt_auc) ? sprintf("%.3f", $lddt_auc): '-'),

			CAD_MCC40 => (defined($cad_aa_mcc40) ? sprintf("%.3f", $cad_aa_mcc40): '-'),
                        CAD_MCC50 => (defined($cad_aa_mcc50) ? sprintf("%.3f", $cad_aa_mcc50): '-'),
                        CAD_AUC => (defined($cad_aa_auc) ? sprintf("%.3f", $cad_aa_auc): '-'),

			SG_MCC40 => (defined($sg_mcc40) ? sprintf("%.3f", $sg_mcc40): '-'), 
			SG_MCC50 => (defined($sg_mcc50) ? sprintf("%.3f", $sg_mcc50): '-'),
			SG_AUC => (defined($sg_auc) ? sprintf("%.3f", $sg_auc): '-'),
		};
		$index++;
	}
    }
    return @results;
}

1;
