package tools;

use strict;

use constant TRUE => 1;
use constant FALSE => 0;

use Data::Dumper;

# set method
sub setmethod {
}

# add tool
sub addtool {
  my ($widget, $type, $item) = @_;

  # tool type
  my $name;
  if ($type eq 1) {
    $name = "Resample";
  } elsif ($type eq 2) {
    $name = "Percentile IB";
  } elsif ($type eq 21) {
    $name = "BS Mean";
  } elsif ($type eq 22) {
    $name = "BS Median";
  } elsif ($type eq 31) {
    $name = "BS bi-var. Mean";
  } else {
    $name = "Unknown";
  }

  # create box
  my $item = box::createbox($name, 'pixmaps/calculator.png', 'TOOL');
  $item->{name} = $name;

  # parameters
  if ($type eq 1) {
    $item->{setting} = {
      M => {value => "100",
            label => "Number of bootstrap replicates",
            type => "entry",
            length => 6},
    };
    $item->{minorder} = ["M"];
  } elsif ($type eq 2) {
    $item->{setting} = {
      alpha => {value => "0.05",
                label => "1-a (confidence level)",
                type => "entry",
                length => 6},
    };
    $item->{minorder} = ["alpha"];
  } elsif ($type eq 31) {
    $item->{nbvars} = 2;
  }

  # functions
  $item->{data} =
    { show => \&db::list,
      preprocess =>
      sub {
        my ($item) = @_;
        $#{$item->{order}} = -1 if (defined(@{$item->{order}}));
        push(@{$item->{order}}, @{$item->{minorder}})
          if (defined(@{$item->{minorder}}));
      },
      postprocess => sub {} };
  if ($type eq 1) {
    $item->{data}{preprocess} = 
      sub {
        my ($item) = @_; my $k = 1;
        $#{$item->{order}} = -1 if (defined(@{$item->{order}}));
        push(@{$item->{order}}, @{$item->{minorder}})
          if (defined(@{$item->{minorder}}));
        foreach my $name (split(":", $item->{data}->{colnames})) {
          $item->{setting}->{"var($k)"} =
            {value => FALSE, label => "Structural var. $name", type => "checkbutton"};
          push(@{$item->{order}}, "var($k)");
          $k++;
        }
      };
  }

  # octave script
  my $name;
  if ($type eq 1) {
    $item->{data}->{script} = "comp_resamp";
  } elsif ($type eq 2) {
    $item->{data}->{script} = "comp_perc_ic";
  } elsif ($type eq 21) {
    $item->{data}->{script} = "comp_bs_mean";
  } elsif ($type eq 22) {
    $item->{data}->{script} = "comp_bs_median";
  }

  # add tools into list
  push (@::toolslist, $item);

  # active button
  $::process_tools_button->set_sensitive(TRUE);
  $::toolsselected = $#::dblist;

}

1;
