package EnsEMBL::Web::ViewConfig::Transcript::Population;

use strict;
use EnsEMBL::Web::Constants;

sub init {
  my ($view_config) = @_;

  $view_config->_set_defaults(qw(
    panel_image          on 
    context              100
    panel_transcript     on
    image_width          800
    reference            ),'',qw(
  ));
  foreach ( @{$view_config->species_defs->databases->{'DATABASE_VARIATION'}->{'DISPLAY_STRAINS'}}){
    $view_config->_set_defaults( 'opt_pop_'.$_  =>  'off');
  }
  foreach ( @{$view_config->species_defs->databases->{'DATABASE_VARIATION'}->{'DEFAULT_STRAINS'}}){  
    $view_config->_set_defaults( 'opt_pop_'.$_  =>  'on');
  }
  $view_config->_set_defaults('opt_pop_'.$view_config->species_defs->databases->{'DATABASE_VARIATION'}->{'REFERENCE_STRAIN'} => 'on');

  ### Add source information if we have a variation database
  my $T = $view_config->species_defs->databases->{'DATABASE_VARIATION'};
  if( $T ) {
    my @sources = keys %{$view_config->species_defs->databases->{'DATABASE_VARIATION'}->{'tables'}{'source'}{'counts'} || {} };
    foreach (@sources){
      my $name = 'opt_'.lc($_);
      $name =~s/\s+/_/g;
      $view_config->_set_defaults($name  => 'on');
    }
  }

  ## Add other options 
  my %options = EnsEMBL::Web::Constants::VARIATION_OPTIONS;

  foreach (keys %options){
    my %hash = %{$options{$_}};
    foreach my $key (keys %hash){
     $view_config->_set_defaults(lc($key) =>  $hash{$key}[0]);
    }
  }

  $view_config->has_images(1);
  $view_config->storable = 1;
}

sub form {
  my( $view_config, $object ) = @_;

  my %options = EnsEMBL::Web::Constants::VARIATION_OPTIONS;
  my %validation = %{$options{'variation'}};
  my  %class  = %{$options{'class'}};
  my  %type = %{$options{'type'}};

  ### Add context selection
	$view_config->add_fieldset('Context');
	$view_config->add_form_element({
		'type'     => 'DropDown', 'select'   => 'select',
		'required' => 'yes',      'name'     => 'context',
		'label'    => 'Context',
	  'values'   => [
		  { 'value' => '20',   'name' => '20bp' },
		  { 'value' => '50',   'name' => '50bp' },
		  { 'value' => '100',  'name' => '100bp' },
		  { 'value' => '200',  'name' => '200bp' },
		  { 'value' => '500',  'name' => '500bp' },
	    { 'value' => '1000', 'name' => '1000bp' },
	    { 'value' => '2000', 'name' => '2000bp' },
	    { 'value' => '5000', 'name' => '5000bp' },
	    { 'value' => 'FULL', 'name' => 'Full Introns' },
	  ]
  });
  ### Add source selection
  $view_config->add_fieldset('Select Variation Source');
  my $t = $object->table_info( 'variation', 'source' );
  my @sources = keys %{$t->{'counts'}};
  foreach (sort @sources){
    my $name = 'opt_'.lc($_);
    $name =~s/\s+/_/g;
    $view_config->add_form_element({
      'type'     => 'CheckBox', 'label' => $_,
      'name'     => $name,
      'value'    => 'on', 'raw' => 1
    });
  }
  ### Add class selection
  $view_config->add_fieldset('Select Variation Class');
  foreach( keys %class ) {
    $view_config->add_form_element({
      'type'     => 'CheckBox', 'label' => $class{$_}[1],
      'name'     => lc($_),
      'value'    => 'on', 'raw' => 1
    });
  }
  ### Add type selection
  $view_config->add_fieldset('Select Variation Type');
  foreach( keys %type ) {
    $view_config->add_form_element({
      'type'     => 'CheckBox', 'label' => $type{$_}[1],
      'name'     => lc($_),
      'value'    => 'on', 'raw' => 1
    });
  }
  ### Add Individual selection
  $view_config->add_fieldset('Select Individuals');
  my @strains =  ( @{$object->species_defs->databases->{'DATABASE_VARIATION'}->{'DEFAULT_STRAINS'}},
                   @{$object->species_defs->databases->{'DATABASE_VARIATION'}->{'DISPLAY_STRAINS'}}, 
                  $view_config->species_defs->databases->{'DATABASE_VARIATION'}->{'REFERENCE_STRAIN'}
  );
  my %seen;
  foreach (sort @strains){ 
    unless (exists $seen{$_} ) {
      $view_config->add_form_element({
       'type'     => 'CheckBox', 'label' => $_,
       'name'     =>  'opt_pop_'.$_,
       'value'    => 'on', 'raw' => 1
      });
      $seen{$_} = 1; 
    }
  }
}
1;