#!/usr/local/bin/perl

package sageview;

use strict;
use SiteDefs;
use Apache;
use EnsWeb;
use ExtURL;

use Bio::EnsEMBL::DBSQL::DBAdaptor;
use Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor;
use Bio::EnsEMBL::ExternalData::Expression::LibraryAdaptor;

use CGI;
use WebUserConfig;
use Digest::MD5;
use Bio::EnsemblViewer::JSTools;

&EnsWeb::get_locator();     # set up the environment...
my $q       = new CGI;
my $aliasid=$q->param('alias');
my $tagid=$q->param('tag');

my $r = Apache->request();
$r->err_header_out('ensembl_headers_out'=>1);


print CGI::header();
print EnsWeb::make_cgi_header(('initfocus'=>1));
print EnsWeb::print_form($aliasid, "gene");

###########################
# Are we using gif or png?
###########################
my $img_type;

if (GD::Image->can("gif")){
    $img_type="gif";
}
else {
    $img_type="png";
}

## Get a DB handle
my $db = &db_connect();
my $sa = $db->get_StaticGoldenPathAdaptor();


my $lib_ad;
my $tag_ad;
eval {
my    $expression_db = Bio::EnsEMBL::DBSQL::DBAdaptor->new(
						-dbname	=>	$ENSEMBL_EXPRESSION,
						-host	=>	$ENSEMBL_HOST,
						-port	=>	$ENSEMBL_HOST_PORT,
						-user	=>	$ENSEMBL_DBUSER,
						-pass	=>	$ENSEMBL_DBPASS
						    );

$lib_ad=Bio::EnsEMBL::ExternalData::Expression::LibraryAdaptor->new($expression_db);
$tag_ad= Bio::EnsEMBL::ExternalData::Expression::SeqTagAdaptor->new($expression_db);
};

if($@){
    print &ensembl_exception("Expression database is unavailable.",$@);
    &ensembl_exit();
}


my @tags=$tag_ad->list_by_alias($aliasid);

if ($#tags<0){
    print qq(<h3>SAGE Expression Profile</h3>\n);
    print qq(<P><B>$aliasid has not been been mapped to a sage library</B></P><BR><BR>);  
    print EnsWeb::make_cgi_footer();
    &ensembl_exit();   
}

unless (defined $tagid){$tagid=$tags[0];}

my @tgs=$tag_ad->fetch_by_Name_with_allAliases($tagid);

$aliasid=uc($aliasid);
my $external_db;
foreach my $t(@tgs){	
    foreach my $link ($t->each_DBLink){
		if (uc($link->primary_id) eq uc($aliasid)){$external_db=$link->database;}	
    }	
}

#################
# set urls
#################

my $external_url;
if ($external_db eq 'ensgene'){
    $external_url="/perl/geneview?gene=";
} elsif ($external_db eq 'enstrans'){
$external_url="/perl/transview?transcript=";
} elsif ($external_db eq 'enspep'){
    $external_url="/perl/protview?peptide=";
} elsif ($external_db eq 'bodymap'){
    $external_url="http://bodymap.ims.u-tokyo.ac.jp/gs_card.php?gs=";
} elsif ($external_db eq 'unigene'){
    $external_url="http://www.ncbi.nlm.nih.gov/cgi-bin/UniGene/clust?ORG=Hs&CID=";
}


my $search_id;
if (defined $external_url){
	$search_id="<A HREF=$external_url$aliasid>";
} elsif (!defined $external_db){
	$search_id=$aliasid;
} 

my $internal_url="/perl/sageview?alias=";
my $int_search_id="<A HREF=$internal_url";
my $lib_url="<A HREF=/perl/libview?libid=";



#####################################################################
## construct the web page
#####################################################################

print qq(<h3>SAGE Expression Profile: $aliasid</h3>\n);

#print <<END;
#print STDERR "$external_db $search_id $aliasid\n";

print qq (
	<TABLE ALIGN="CENTER" BGCOLOR="#ffffff" WIDTH="100%" BORDER="1" CELLPADDING="3" CELLSPACING="0">
    	<tr align="left" valign="middle">
    		<td nowrap class="yellow2">
				<H4>$external_db</H4>
			</td>
			<TD class="yellow1"><P><B>$search_id $aliasid</A> has been mapped to the following sage tags</B><BR>
				Click on each tag to see its expression profile</P><BR><BR>
);

foreach my $tag (@tags){
	print qq (
			<B>&nbsp;&nbsp;<A HREF="/perl/sageview?alias=$aliasid&tag=$tag">$tag</A></B>&nbsp;&nbsp;&nbsp;&nbsp<BR>
	);   
}        

print qq( </td></tr>);

print "</TABLE><BR><BR>\n";





print qq (<TABLE ALIGN="CENTER" BGCOLOR="#ffffff" WIDTH="100%" BORDER="1" CELLPADDING="3"  CELLSPACING="0">
<tr align="left" valign="middle">
    <td nowrap class="yellow2"><H4>SAGE Tag ID </H4></td>
	 
	  <td class="yellow1">);


print qq (<Font><B>&nbsp;&nbsp;$tagid</B></font>&nbsp;&nbsp;&nbsp;&nbsp<BR>);

################
# links table
###############

my %sage_links = (
    'ENSG'        => [],
    'ENST'        => [],
    'ENSP'        => [],
    'SAGE'        => [],
    'UNI'         => [],
    'BODYMAP'     => [],
);


if(@tgs){
    print qq(<tr valign="middle"><td class="yellow2"><h4>SAGE mapping</h4></td>);
    print qq(<TD class="yellow1"><B>This SAGE Tag has been mapped to the following database identifiers</B><BR>
Click on each identifier to see matching sage tags<BR><BR>);
   # print qq (<TD class="yellow1"><B></B><BR>);
    foreach my $t(@tgs){	
	foreach my $link ($t->each_DBLink){
	    push (@{$sage_links{$link->database()}}, $int_search_id.$link->primary_id.">".$link->primary_id."</A>");
	}	
    }
    foreach my $key (sort keys %sage_links){ 
	unless ($key eq 'sage'){
	    print "$key: ", join(' ',(sort @{$sage_links{$key}})),"<BR>" if (scalar (@{$sage_links{$key}}) > 0);
	} 
    }
    print "</TD></TR>\n";    
}

print "</TABLE>\n";


################
# library table
###############

print qq(
	<BR><BR>
    <TABLE WIDTH="100%" CELLPADDING="3" CELLSPACING="0" BORDER="0">
     <TR align="left" class="yellow2">
		<TD colspan="5">
			<font color="#000000"><b>Expression Profile</b></font>
		</TD>
	</tr>
    <tr align="left" CLASS="yellow1">
    	 <td>
			<b>No.</b>&nbsp;
		</td> 
		<td>
			<b>Library</b>
		</td>  
		<td>
			<b>Frequency</b>&nbsp;
		</td> 
		<td>
			<b>Total tags</b>
		</td>
		<td>
			<b>Relative frequency</b>&nbsp;
		</td>
    </tr>
    <tr>
		<td colspan="5">&nbsp;
		</td>
	</tr>
);
   

    my @libs=$lib_ad->fetch_by_SeqTag_Name($tagid); 



my @libraries;

foreach my $l(@libs){
	my @tgs=$l->fetch_SeqTag_by_Name($tagid);
	my $tag=shift @tgs;
	my @info=($l->name,$tag->frequency,$l->total_seqtags,$tag->relative_frequency,$l->id);
	push @libraries,\@info;
}

my $i=1;

foreach my $arr_ref(sort {$b->[3] <=> $a->[3]  }@libraries){
	print "<tr valign=\"top\">\n";
	print 	"<td align=\"left\">$i</td>\n";
	print 	"<td> ".$lib_url.$arr_ref->[4].">".$arr_ref->[0]."</A>&nbsp;</td>\n";   
	print 	"<td align=\"left\">".$arr_ref->[1]."&nbsp;</td>\n";
	print 	"<td>".$arr_ref->[2]."&nbsp;</td>\n";
	print 	"<td>".$arr_ref->[3]."&nbsp;</td>\n";
	print "</tr>\n";
	$i++;
 }



print qq(
	<tr>
		<td colspan="5">&nbsp;
		</td>
	</tr>
);

print "</TABLE>\n";

print "<br>\n";
print EnsWeb::make_cgi_footer();

1; 


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


sub db_connect {

    my ($geneid) = @_;
    my $db = undef;
    eval {
        my $locator = &EnsWeb::get_locator();
        $db =  Bio::EnsEMBL::DBLoader->new($locator);
		$db->static_golden_path_type('UCSC');
    };
    if( $@ ) { 
        print &ensembl_exception("Sorry, the Ensembl database is currently unavailable.",$@);
		&ensembl_exit();
    }
    else{
        return ($db);
    }
}

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


1;
