#!/usr/local/bin/perl 

use EnsWeb;
use ExtURL;

use CGI qw(:standard :html3);

use strict;

my $q = new CGI;
print $q->header();
print EnsWeb::make_cgi_header(('initfocus'=>1));

my $domain = $q->param('domainentry');

print EnsWeb::print_form($domain, "domainentry");

if (defined($domain)) { 
    process_Domain($domain);
}

print EnsWeb::make_cgi_footer();

############################################################################
sub process_Domain {

    my ($domain) = @_;
    my @genes;

    eval {
        my $db    =  db_connect(); 
	@genes    =  find_Genes($db,$domain);
    };


    if( $@ ) {
	print "<p>Warning! Exception<p>\n<pre>\n$@\n</pre>\n";
	exit(0);
    }

    process_Genes($domain,@genes);
}
    

############################################################################
sub db_connect {
    my $locator = &EnsWeb::get_locator();
    my $db      =  Bio::EnsEMBL::DBLoader->new($locator);
    
    return $db;
}

############################################################################
sub find_Genes {
    my ($db,$domain) = @_;

    my @genes;

    my $sth = $db->prepare("SELECT  
				    tr.gene,
				    tr.translation
			    FROM    interpro i,
				    protein_feature pf,
				    transcript tr
 			    WHERE   i.interpro_ac = '$domain' 
			    AND	    i.id = pf.hid 
			    AND	    pf.translation = tr.translation
 			    GROUP BY tr.gene"
			   );

    my $rv = $sth->execute();
    my %geneh;

    while (my $rowarray = $sth->fetchrow_arrayref) {

	 my ($geneid,$translation) = @{$rowarray};
      
	  if( !defined $geneh{$geneid} ) {
	      $geneh{$geneid} = {};
	   }
	  $geneh{$geneid}->{'geneid'} = $geneid;    

	  my $sth = $db->prepare("SELECT description from gene_description where gene_id = '$geneid'");  
	  $sth->execute;
	  while( my $aref = $sth->fetchrow_arrayref ) {
	      my ($desc) = @{$aref};    
	       #if( $dbname ne 'HUGO
	      $geneh{$geneid}->{'names'} .= " ".$desc;
	  }
    }
    return values %geneh;
}

############################################################################
sub process_Genes {
    my ($domain,@genes) = @_;
    my $urls = ExtURL->new; 
    my $db = db_connect();
    my $sp = $db->get_StaticGoldenPathAdaptor;
    my $domain_url = $urls->get_url('INTERPRO',$domain); 
    
    if (scalar @genes > 0) {
	print qq(<h3>The following Ensembl genes contain InterPro hits <A HREF="$domain_url">$domain</A></h3>\n);
	print("<p>Please click on the gene identifier to go to a graphical gene view.</p>\n");

	print("<center>\n");
    print <<EOH;
    <table align="center" width="60%" border="0" cellspacing="0" cellpadding="0">
    <tr> 
	<td colspan="7" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td> 
    </tr>
    <tr valign="middle" class="yellow2">
      <th><img src="/gfx/blank.gif" width="15" height="22"></th>
      <th align="center" class="arial">Gene ID</th>
      <th class="arial">&nbsp;&nbsp;</th>
      <th align="center" class="arial">Genome Location</th>
      <th class="arial">&nbsp;&nbsp;</th>
      <th align="center" class="arial">Description (if known)</th>
      <th><img src="/gfx/blank.gif" width="15" height="22"></th>
    </tr>
    <tr> 
	<td colspan="7" class="black"><img src="/gfx/blank.gif" width="1" height="1"></td>
    </tr>

EOH
    foreach my $gene (@genes) {
	my ($chr,$mb) = $sp->get_Gene_chr_MB($gene->{geneid});
	my $id = $gene->{geneid};
	my $display = $gene->{names};
    
	print <<EOS;
	<TR class="yellow1">
	    <td><img src="/gfx/blank.gif" width="15" height="22"></td>
	    <TD><a href="/perl/geneview?gene=$id">$id</a></TD>
	    <td class="arial">&nbsp;&nbsp;</td>
	    <TD nowrap><A HREF="contigview?geneid=$id">$chr  $mb Mb</A></TD>
	    <td class="arial">&nbsp;&nbsp;</td>
	    <TD align="center">$display&nbsp;</TD>
	    <td><img src="/gfx/blank.gif" width="15" height="22"></td>
	</TR>
EOS
    }
	print<<EOS;
	<tr>
	    <td colspan="7" class="grey1"><img src="/gfx/blank.gif" width="1" height="1"></td>
	</tr>
    </table><br><br>
EOS
} else {
    my $domain = param('domainentry');
    print("<p>No genes found containing protein domain: $domain</p>\n");
}
}

############################################################################
