package IDSearch;

use strict;
use DBI;

use lib "/usr/local/dicty/www_dictybase/db/lib/common";
use Login qw (ConnectToDatabase);
use lib "/usr/local/dicty/www_dictybase/db/lib/dictyBase/Objects";
use ConfigPathdictyBase;

#######################################################################
#################### global variables #################################
#######################################################################

our $dbh;

#######################################################################
sub new {      ############ constructor ###############################
#######################################################################
       
    my ($type, %args) = @_;

    my $self = {};
    bless $self, $type;

    if ($args{'dbh'}) { 
	$dbh = $args{'dbh'};
    }
    elsif ($args{'database'}) {
	$self->{'_database'} = $args{'database'};
	$dbh = &ConnectToDatabase($args{'database'});
    }
    else {
	die "No database name or database handle is passed to this object.";
    }
    $self->{'_query'} = $args{'query'};

    $self->{'_query'} =~ s/\*/\%/g;
    $self->{'_query'} =  uc($self->{'_query'});

    return $self;
}

#
#  dictyBase new feature: accession No. search
#
########################################################################
sub accessionNoArrayRef {
########################################################################
   my ($self) = @_;
   my $sth;

   $sth = $dbh->prepare("
	    SELECT /*+ Index ( X U_DBXREF ) */  DISTINCT X.ACCESSION
	      FROM $ENV{'CHADO_USER'}.V_NOTDELETED_FEATURE F
	INNER JOIN $ENV{'CHADO_USER'}.FEATURE_DBXREF FX
	        ON FX.FEATURE_ID = F.FEATURE_ID
	INNER JOIN $ENV{'CHADO_USER'}.DBXREF X
	        ON X.DBXREF_ID = FX.DBXREF_ID
	INNER JOIN $ENV{'CHADO_USER'}.DB D
	        ON D.DB_ID = X.DB_ID
	     WHERE D.NAME  = 'DB:Accession Number'
		  AND X.ACCESSION LIKE UPPER(?)
       ORDER BY X.ACCESSION
     ");
     
   $sth->execute($self->{'_query'});
   my $arrayRef = $sth->fetchall_arrayref();
   $sth->finish;
   return $arrayRef;
}


#
#  dictyBase new feature: accession No. search
#
########################################################################
sub accessionNoNum {
########################################################################
   my ($self) = @_;
   my $sth;

   $sth = $dbh->prepare("
	    SELECT /*+ Index ( X U_DBXREF ) */  COUNT(DISTINCT X.ACCESSION)
	      FROM $ENV{'CHADO_USER'}.V_NOTDELETED_FEATURE F
	INNER JOIN $ENV{'CHADO_USER'}.FEATURE_DBXREF FX
	        ON FX.FEATURE_ID = F.FEATURE_ID
	INNER JOIN $ENV{'CHADO_USER'}.DBXREF X
	        ON X.DBXREF_ID = FX.DBXREF_ID
	INNER JOIN $ENV{'CHADO_USER'}.DB D
	        ON D.DB_ID = X.DB_ID
	     WHERE D.NAME  = 'DB:Accession Number'
		  AND X.ACCESSION LIKE UPPER(?)
     ");
    $sth->execute($self->{'_query'}); 
    my $accNoNum = $sth->fetchrow;
    $sth->finish;
    return $accNoNum;
}


#
#  dictyBase new feature: dictybaseid search
#
########################################################################
sub IDNoArrayRef {
########################################################################
   my ($self) = @_;
   my $sth;

   $sth = $dbh->prepare("
	    SELECT X.ACCESSION
	      FROM $ENV{'CHADO_USER'}.DBXREF X
	INNER JOIN $ENV{'CHADO_USER'}.DB D
	        ON D.DB_ID = X.DB_ID
	     WHERE D.NAME  = 'DB:dictyBase'
		  AND X.ACCESSION LIKE UPPER(?)
		  AND X.ACCESSION LIKE 'DDB_______'
       ORDER BY X.ACCESSION
     ");
     
   $sth->execute($self->{'_query'});
   my $arrayRef = $sth->fetchall_arrayref();
   $sth->finish;
   return $arrayRef;
}


#
#  dictyBase new feature: dictybaseid search
#
########################################################################
sub IDNoNum {
########################################################################
   my ($self) = @_;
   my $sth;

   $sth = $dbh->prepare("
	    SELECT COUNT(X.ACCESSION)
	      FROM $ENV{'CHADO_USER'}.DBXREF X
	INNER JOIN $ENV{'CHADO_USER'}.DB D
	        ON D.DB_ID = X.DB_ID
	     WHERE D.NAME  = 'DB:dictyBase'
		  AND X.ACCESSION LIKE UPPER(?)
		  AND X.ACCESSION LIKE 'DDB_______'
     ");
    $sth->execute($self->{'_query'}); 
    my $IDNoNum = $sth->fetchrow;
    $sth->finish;
    return $IDNoNum;
}


########################################################################
1;
########################################################################
