#!/usr/local/bin/perl

use strict;
use CGI qw/:standard/;
use DBI qw(:sql_types);
use Apache;
use EnsWeb;
use GramenePage;
use CSHL::Config;

my ($records, $bac_number) = (0, 0);

my (%cloneName, %seqSite, %HTGPhase, %GI, %length, %homePage, %fragments);
my ($clone_id, $clone_name, $site, $phase, $gi, $len, $page);
my $dbh;
my $chr = param('chr') || 1;
my $sorting = param('sorting') || "phase";

print STDERR "connect(,",SequenceDBUser,",",SequenceDBPassword,")\n";

$dbh = DBI->connect(SequenceDataSource, SequenceDBUser, SequenceDBPassword);

my $query = "select clone.id, clone.name, clone.site, clone.htg_phase, ". 
	    "clone.gi, dna.length, sequencing_site.home_page ".
	    "from clone, dna, sequencing_site, contig ".
            "where clone.internal_id = contig.clone and ".
	    "contig.dna = dna.id and ".
            "clone.site = sequencing_site.id and ".
            "contig.chromosomeId = $chr";

my $sth = $dbh->prepare($query);


$sth->bind_columns(undef,\$clone_id,\$clone_name,\$site,\$phase,\$gi,\$len,\$page); 


$sth->execute();


while ($sth->fetchrow) {

    $records++;
    if (!$cloneName{$clone_id}) {
      $bac_number++;
      $cloneName{$clone_id} = $clone_name;
    }
    $seqSite{$clone_id} = $site;
    $HTGPhase{$clone_id} = $phase;
    $GI{$clone_id} = $gi;
    $length{$clone_id} += $len;
    $homePage{$clone_id} = $page;
    $fragments{$clone_id}++;
}

$sth->finish;

my %labels =('1'=>'Chromosome 1', 
	     '2'=>'Chromosome 2', 
             '3'=>'Chromosome 3', 
             '4'=>'Chromosome 4',
             '5'=>'Chromosome 5', 
             '6'=>'Chromosome 6', 
             '7'=>'Chromosome 7', 
             '8'=>'Chromosome 8',
             '9'=>'Chromosome 9', 
             '10'=>'Chromosome 10', 
             '11'=>'Chromosome 11', 
             '12'=>'Chromosome 12',
             '0'=>'Unassigned');

my @values = ('1', '2', '3', '4', '5', '6', '7', 
	      '8', '9', '10', '11', '12', '0');

my $r=Apache->request();
my $grpg=GramenePage->new($r);
print CGI::header();       
print CGI::start_html(-style=>{-src=>$grpg->stylesheet});
print $grpg->start_body();

print <<HEADER;
<center>

<table cellspacing=\"0\" cellpadding=\"3\" border=\"0\" width=\"98%\">
 <tr>
   <th align=\"CENTER\" colspan=2 class=\"searchtitle\">Rice BAC/PAC Sequence Information</th>
 </tr>
 <tr valign=\"bottom\">
  <td align=\"CENTER\" class=\"searchbody\"><br>
  <span class=\"alert\"><font size=+1>Select a chromosome</font></span>
  </td>
  <td align=\"CENTER\" class=\"searchbody\"><br>
  <span class=\"alert\"><font size=+1> BAC/PAC Name or Accession&nbsp;&nbsp;</font></span>[e.g.&nbsp;<a href=\"/perl/contigview?clone=AP002540\">P0434B04</a>,&nbsp;&nbsp;<a href=\"/perl/contigview?clone=AP002540\">AP002540</a>]
  </td>
 </tr>
HEADER

print "<tr valign=\"top\">\n";
print " <td align=\"CENTER\" nowrap class=\"searchbody\">\n";
print start_form(-method=>'POST', 
                 -action=>'/perl/SeqTable');

print popup_menu(-name=>"chr",
                 -Values=>\@values,
                 -default=>"3",
                 -labels=>\%labels);

print submit('Search');
print end_form();
print "</td>\n";

print "<td align=\"CENTER\" nowrap class=\"searchbody\">\n";
print start_form(-method=>'GET',
                 -action=>'/perl/unisearch');
print hidden(-name=>'type',
             -value=>'clone');
print "<INPUT TYPE=\"TEXT\" NAME=\"q\" SIZE=\"20\">\n";
print submit('Display');         	    
print end_form();
print "</td>\n";
print "</tr>\n";
print "</table>\n";
print "</center>\n";

print <<MAINTABLETEXT;
<center>
 <h2>To view the features of a sequence, please select a BAC/PAC.</h2>
<p><span class="alert">(Note: Contig Viewer is currently able to display information for BACs/PACs in
 phase 2 and up)</span> 
</center>
MAINTABLETEXT

print "<br>";

print "<center><table align=\"CENTER\" width=\"80%\"><tr align=\"CENTER\"><td align=\"CENTER\">";
print EnsWeb::print_form( '',"all" );
print "</td></tr></table></center>";

if ($records == 0) {
    print "<br><br>\n";
    print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n";

    if ($chr == 0) {
      print "There is no information available for unassigned BAC/PACs\n";

    } else {
      print "There is no BAC/PAC information available on chromosome $chr.\n";

    } 
} else {

   print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>Chromosome $chr</strong>";
   print "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$bac_number clones sorted by:\n"; 

   print "<a href=\"/perl/SeqTable?chr=$chr&sorting=clone\">[ BACs/PACs ]</a>\n";
   print "<a href=\"/perl/SeqTable?chr=$chr&sorting=site\">[Seq. Site]</a>\n";
   print "<a href=\"/perl/SeqTable?chr=$chr&sorting=phase\">[ HTG Phase ]</a>\n";
   print "<a href=\"/perl/SeqTable?chr=$chr&sorting=length\">[ Length ]</a>\n";
   print "<a href=\"/perl/SeqTable?chr=$chr&sorting=accession\">[ Acc. ]</a>\n";

  buildSeqTable();
}

print "<br>&nbsp;\n";
print $grpg->end_body;


sub buildSeqTable {
  
  print "<center>\n";
  print "<table BORDER COLS=7 WIDTH=\"95%\" NOSAVE >\n";
  print "<tr>\n";
  print "<td>\n";
  print "<center><font size=+1>BAC/PAC</font> (contig viewer)</center>\n";
  print "</td>\n";

  print "<td>\n";
  print "<center><font size=+1>Sequencing Site</font></center>\n";
  print "</td>\n";

  print "<td>\n";
  print "<center><font size=+1>HTG Phase</font></center>\n";
  print "</td>\n";

  print "<td>\n";
  print "<center><font size=+1>Fragments</font></center>\n";
  print "</td>\n";

  print "<td>\n";
  print "<center><font size=+1>DNA Length</font> (FASTA)</center>\n";
  print "</td>\n";

  print "<td>\n";
  print "<center><font size=+1>GenBank Accession</font></center>\n";
  print "</td>\n";
  print "</tr>\n";

  if ($sorting eq "phase") {

     foreach $clone_id (sort {$HTGPhase{$b} <=> $HTGPhase{$a} ||
			      $cloneName{$a} cmp $cloneName{$b}}
			keys %HTGPhase)  {
       tableContents($clone_id);
     }

  } elsif ($sorting eq "clone") {

    foreach $clone_id (sort {$cloneName{$a} cmp $cloneName{$b} ||
			      $HTGPhase{$b} <=> $HTGPhase{$a}}
		       keys %cloneName) {
      tableContents($clone_id);
    }

  } elsif ($sorting eq "site") {

    foreach $clone_id (sort {$seqSite{$a} cmp $seqSite{$b} ||
			      $HTGPhase{$b} <=> $HTGPhase{$a}}
		       keys %seqSite) {
      tableContents($clone_id);
    }

  } elsif ($sorting eq "length") { 

    foreach $clone_id (sort {$length{$a} <=> $length{$b} ||
			     $cloneName{$a} cmp $cloneName{$b}}
		       keys %length) {
      tableContents($clone_id);
    }

  } elsif ($sorting eq "accession") { 

    foreach $clone_id (sort {$a cmp $b ||
			     $cloneName{$a} cmp $cloneName{$b}}
		       keys %cloneName) {
      tableContents($clone_id);
    }
  }
  print "</table></center>\n";
}

sub tableContents {

    my ($clone_id, $clone_name, $site, $phase, $gi, $len, $page, $frags);
    $clone_id = shift;

    $clone_name	= $cloneName{$clone_id};
    $site = $seqSite{$clone_id};
    $phase= $HTGPhase{$clone_id};
    $gi = $GI{$clone_id};
    $len= $length{$clone_id};
    $page = $homePage{$clone_id};
    $frags= $fragments{$clone_id}; 
    
    print "<tr>\n";
    print "<td>\n";
    if ($phase == 2 || $phase == 3) { 

      print "<center>\n";
      print "<a href=\"/perl/contigview?";
      print "clone=$clone_id\">\n";
      print "$clone_name</a></center>\n";

    } else {

      print "<center>$clone_name</center>\n";

    }
    print "</td>\n";

    #print "<td>\n";
    #print "<center>$chr</center>\n";
    #print "</td>\n";

    print "<td>\n";
    print "<center><a href=\"$page\">$site</a></center>\n";
    print "</td>\n";

    print "<td>\n";

    if ($phase == 3) { 

      my $query = "select exon.id ".
	          "from clone, contig, exon ".
                  "where clone.internal_id = contig.clone and ".
	          "exon.contig = contig.internal_id and ".
                  "clone.id = \'$clone_id\'";

      my $sth = $dbh->prepare($query);

      $sth->execute();

      my $exon_count = 0;
      while (my $exon_id = $sth->fetchrow) {
	$exon_count++;

      }      
      $sth->finish;

      if ($exon_count > 0) {
	print "<center>$phase (annotated)</center>\n";
	
      } else {
	print "<center>$phase</center>\n";
      } 

    } else {

       print "<center>$phase</center>\n";
     }
    print "</td>\n";

    print "<td>\n";
    print "<center>$frags</center>\n";
    print "</td>\n";

    print "<td>\n";
    print "<center><a href=\"http://www.ncbi.nlm.nih.gov/entrez/viewer.cgi?cmd&txt&save=0&cfm=on&list_uids=$gi&db=&view=fasta\">$len</a></center>\n";
    print "</td>\n";

    print "<td>\n";
    print "<center><a href=\"http://www.ncbi.nlm.nih.gov:80/entrez/viewer.cgi?val=$gi&view=gb\">$clone_id</a></center>\n";
    print "</td>\n";

    print "<tr>\n";
}

$dbh->disconnect;
