#use perl add_links_to_zoomed_svg.pl $IN_FILE> ../Web/svg/ddr_zoom.svg

use XML::Twig;
use DBI;  

my $IN_FILE=$ARGV[0] || die "usage perl add_links_to_zoomed_svg.pl IN_FILE > ../Web/svg/ddr_zoom.svg";

my $database='DDR_120115';
my $hostname='demetriusIB';                
my $dsn = "DBI:mysql:database=$database;host=$hostname";
my $user='ddr_admin';
my $password='ddr_2014';
my $dbh = DBI->connect($dsn, $user,$password);
 

my $name_to_ids = $dbh->selectall_hashref("SELECT `Gene Name`,id_entity FROM entity","Gene Name") || die $dbh->errstr;  
my $ids_to_desc = $dbh->selectall_hashref("SELECT id_entity,Description FROM entity","id_entity") || die $dbh->errstr; 
my $ids_to_age = $dbh->selectall_hashref("SELECT id_entity,gene_age FROM entity,age where age.id_age=entity.id_age","id_entity") || die $dbh->errstr; 
my $ids_to_paths=$dbh->selectall_arrayref("SELECT id_entity,pathway FROM pathway_rel,pathway where pathway_rel.id_pathway=pathway.id_pathway
",{ Slice => {} }) || die $dbh->errstr; 

my $paths;

foreach my $pair (@$ids_to_paths) {
	if ($paths{$pair->{id_entity}}){
		push(@{$paths{$pair->{id_entity}}},$pair->{pathway})
	} else {
		$paths{$pair->{id_entity}}= [$pair->{pathway}]
	}
}



my $twig=XML::Twig->new(   
    twig_handlers => 
      { '*[@class=~/gene/]'=>\&add_link,
		
      },
    pretty_print => 'indented',                # output will be nicely formatted
    empty_tags   => 'html',                    # outputs <empty_tag />
                         );
  $twig->parsefile( $IN_FILE);
  $twig->print;
	
  sub add_link
    { my( $twig, $path)= @_;
	 print STDERR  "here we go!\n"; 
	  my $class=$path->att('class'); 
	  if ($class=~/gene (\w+?)$/){
		my $gene_name=$1;
		print STDERR  "found ".$path->tag." for gene $gene_name\n"; 
		my $id;
		if ( $id=($name_to_ids->{$gene_name}->{'id_entity'}) ){ 
            say STDERR "$gene_name succesfully changed by id: $id";
			my $parent=$path->parent; 
			my $link;
			if ($parent->tag() eq "a"){
			   $link=$parent; 
			} else {
				$link=$path->wrap_in("a"); 
			}
            $href="../Php/display?id=".$id;  
            $link->set_att('xlink:href',$href);
            $link->set_att('target',"_parent");
			my $title=$ids_to_desc->{$id}->{'Description'}."\nAge:".$ids_to_age->{$id}->{'gene_age'}."\nPathways:".join(" ",@{$paths{$id}});
			say STDERR "adding title :$title";
            $link->set_att('xlink:title',$title);
			#$link->print;
			my $new_class=$class." ".$ids_to_age->{$id}->{'gene_age'}." ".join(" ",@{$paths{$id}});
			say STDERR "setting class to $new_class";
			$path->set_att('class',$new_class);
         }  else {
               say STDERR "$gene_name in link $href DOES NOT EXISTS IN DATABASE";
         
 	  	 }  
         #$twig->flush;;
      } else {
			say STDERR "cannot find gene name in $class\n";
	}
   }
    
  