package EnsEMBL::Web::Object::DAS::ditags;

use strict;
use warnings;

use EnsEMBL::Web::Object::DAS;
our @ISA = qw(EnsEMBL::Web::Object::DAS);

use Bio::EnsEMBL::Map::DBSQL::DitagFeatureAdaptor;
my %ditag_analysis = (
	FANTOM_GSC_PET => 1,
	FANTOM_GIS_PET => 1,
	GIS_PET_Encode => 1,
	GIS_PET => 1,
	medaka_5pSAGE=> 1,
#	CHIP_PET => 1, # got its own track
#	FANTOM_CAGE => 1 # got its own track 
	);

sub Types {
    my $self = shift;

    my @features;
    my $dba = $self->database('core', $self->real_species);

    my $dfa = $dba->get_DitagFeatureAdaptor;
    my $da = $dba->get_DitagAdaptor;

    if (my @segments = $self->Locations) {
      foreach my $s (@segments) {
        if (ref($s) eq 'HASH' && $s->{'TYPE'} eq 'ERROR') {
            push @features, $s;
            next;
        }
        my $slice = $s->slice;
	my $tHash;
        foreach my $ft (@{$dfa->fetch_all_by_Slice($slice) || [] }) {
	  next unless $ditag_analysis{ $ft->analysis->logic_name };
	  $tHash->{ $ft->analysis->logic_name } ++;
        }

	my @tarray = map { {id=>$_, text=>$tHash->{$_}} } sort keys %{$tHash ||{}};
	push @features, {
	    REGION => $slice->seq_region_name,
	    START => $slice->start,
	    STOP => $slice->end,
	    FEATURES => \@tarray,
	}
      }
    } else {
	my $tHash;
        foreach my $ft (@{$dfa->fetch_all || [] }) {
	  next unless $ditag_analysis{ $ft->analysis->logic_name };
	  $tHash->{ $ft->analysis->logic_name } ++;
        }
	my @tarray = map { {id=>$_, text=>$tHash->{$_}} } sort keys %{$tHash ||{}};
	push @features, {
	    REGION => '*',
	    FEATURES => \@tarray,
	}
    }
    return \@features;
}
sub Features {
    my $self = shift;

    my $species = $self->real_species;
    my $dba = $self->database('core', $self->real_species);
    my @segments = $self->Locations;
    my @features;

    my %fts = map {$_ => 1} grep {$_}  @{$self->FeatureTypes || []};
    my $filter = %fts;

    my $dfa = $dba->get_DitagFeatureAdaptor; 
    my $da = $dba->get_DitagAdaptor;

    foreach my $s (@segments) {
	if (ref($s) eq 'HASH' && $s->{'TYPE'} eq 'ERROR') {
	    push @features, $s;
	    next;
	}
	my $slice = $s->slice;
	my @segment_features;

	foreach my $ft (sort {$a->start <=> $b->start} @{$dfa->fetch_all_by_Slice($slice) || [] }) {
	    next unless ($ditag_analysis{$ft->analysis->logic_name});
	    my $ftype = $ft->analysis->logic_name;
	    next unless (! $filter || $fts{$ftype});

	    my $tag_count = $da->fetch_by_dbID($ft->ditag_id)->tag_count();

	    my $id = join('.', $ft->ditag_id, $ft->ditag_pair_id);
	    my $g_location = "Location: ".join(' - ', ($ft->get_ditag_location)[0,1]);

	    my $group = {
		'ID' => $id,
		'LINK' => [ {text => 'More info', href => "http://www.ensembl.org/$species/ditags/$ftype.html"} ],
		'TYPE' =>  join('-', $ftype,$ft->ditag_side),
		'NOTE'        => ["tag_count: $tag_count", $g_location],
	    };
	    $id = join('.', $id, $ft->ditag_side);

	    my $f = {
		'ID'          => $id,
		'LABEL'       => $ft->ditag_id,
		'TYPE' =>  join('-', $ftype,$ft->ditag_side),
#		'TYPE'        => $ftype,
	#	'CATEGORY'        => $ft->ditag_side || '', 
		'METHOD'      => $ftype,
                'START'       => $ft->seq_region_start,
                'END'         => $ft->seq_region_end,
                'ORIENTATION' => $self->ori($ft->seq_region_strand),
		'NOTE'        => ["tag_count: $tag_count"],
		'GROUP' => [$group], 
	    };
	    push @segment_features, $f;
	}

	push @features, {
    	    'REGION' => $s->seq_region_name, 
	    'START'  => $s->seq_region_start, 
	    'STOP'   => $s->seq_region_end,
	    'FEATURES' => \@segment_features
	    };
    }
    return \@features;
}

sub Stylesheet {
    my $self = shift;
    return qq{
<STYLESHEET version="1.0">
 <CATEGORY id="default">
    <TYPE id="FANTOM_GSC_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GSC_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GIS_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GIS_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="GIS_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="GIS_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="CHIP_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="CHIP_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="default">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>royalblue1</BGCOLOR>
           <FGCOLOR>royalblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
   </CATEGORY>
 
  <CATEGORY id="group">
    <TYPE id="FANTOM_GSC_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GSC_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GIS_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="FANTOM_GIS_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="GIS_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="GIS_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>lightblue1</BGCOLOR>
           <FGCOLOR>lightblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="CHIP_PET-R">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="CHIP_PET-L">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>darkolivegreen1</BGCOLOR>
           <FGCOLOR>darkolivegreen1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
    <TYPE id="default">
      <GLYPH>
         <ANCHORED_ARROW>
           <HEIGHT>10</HEIGHT>
           <BGCOLOR>royalblue1</BGCOLOR>
           <FGCOLOR>royalblue1</FGCOLOR>
           <BAR_STYLE>line</BAR_STYLE>
           <NO_ANCHOR>1</NO_ANCHOR>
           <BUMP>1</BUMP>
           <FONT>sanserif</FONT>
         </ANCHORED_ARROW>
      </GLYPH>
    </TYPE>
  </CATEGORY>

</STYLESHEET>
};
}

1;