#!/usr/bin/perl

use lib qw(/usr/lib/libDrakX);
use strict;
use interactive;
use common;
use MDK::Wizard::Wizcommon;

$::isWizard = 1;
$::Wizard_title = "Drakka";
my $in = interactive->vnew('su', 'drakka');

my $wiz = new MDK::Wizard::Wizcommon;
my $o = {
	 name => N("Ka auto tools"),
	 var => {
		 device => 'sda',
		 golden => 'n1',
		 nbnode => '3',
		 skipdhcp => '1',
		},
#	 defaultimage => "/usr/share/wizard/images/ka.png"
	};

my @list_device = qw(sda sdb hda hdb);

$o->{pages} = {
    welcome => {
	name => N("Quick setup Ka duplication"),
	data => [
		 { label => N("Golden node:"), val => \$o->{var}{golden} },
		 { label => N("Device:"), val => \$o->{var}{device}, list => \@list_device },
		 { label => N("Number of node:"), val => \$o->{var}{nbnode} },
		 { label => N("Skip dhcp:"), type => 'bool', val => \$o->{var}{skipdhcp} },
		 ],
	    no_back => 1,
	    next => 'configuresum',
	},
	    configuresum => {
		name => N("Ok now launch Ka duplication with these values"),
		pre => sub {
		    $o->{var}{dhcp} = $o->{var}{skipdhcp} ? N("enabled") : N("disabled");
		},
		data => [
			 { label => N("Golden node:"), fixed_val => \$o->{var}{golden} },
			 { label => N("Device:"), fixed_val => \$o->{var}{device} },
			 { label => N("Number of node:"), fixed_val => \$o->{var}{nbnode} },
			 { label => N("Skip Dhcp:"), type => 'bool', fixed_val => \$o->{var}{dhcp} },
			 ],
		    post => \&do_it,
		    next => 'end',
		},
		    end => {
			name => N("Ka replication done"),
			no_back => 1,
			end => 1,
			next => 0,
		    },
    errorconnect => {
	name => N("Can't connect to golden node"),
	no_back => 1,
	end => 1,
	next => 0,
    },
    interactive_help_id => {
	name => N("toto"),
    },
};

sub new {
  my ($class, $_conf) = @_;
  bless {
	 o => $o,
	}, $class;
}

sub do_it {
    return if $::testing;
    my $in = 'interactive'->vnew('su', 'Ka duplication');
    my $w = $in->wait_message(N("Ka replication in progress"), N("Please wait end of processus ..."));
    my $cmd = "xterm -reverse -e /usr/bin/setup_auto_add_nodes.pl -a -c -g $o->{var}{golden} -n $o->{var}{nbnode} -p $o->{var}{device}";
    if ($o->{var}{skipdhcp} == "1" ) {
	print $cmd;
	system("$cmd -s");
    } else {
	print $cmd;
	system("$cmd");
    }
  undef $w;
}

sub wizard {
  my ($o) = @_;
  my $page = $o->{pages}{welcome};
  $::Wizard_title = $o->{name};
  $::Wizard_pix_up = $o->{defaultimage};
  if ($> && !$o->{allow_user} && !$::testing) {
    require_root_capability();
  }
  $::in = $in; # so that steps "complete" callbacks can call interactive->ask_warn() :-(

  my $next = 'welcome';
  my @steps;
  while (1) {
    undef $::Wizard_no_previous;
    undef $::Wizard_no_cancel;
    $::Wizard_no_previous = $page->{no_back};
    $::Wizard_finished = $page->{end};
    $::Wizard_no_cancel = $page->{no_cancel} || $page->{end};
    defined $page->{pre} and $page->{pre}();
    # FIXME or the displaying fails
    my $data = defined $page->{data} ? ref $page->{data} ? $page->{data} : [ { label => '' } ] : [ { label => '' } ];
    my $data2;
    foreach my $d (@$data) {
      $d->{fixed_val} and $d->{val} = ${$d->{fixed_val}};
      if ($d->{fixed_list}) {
	$d->{list} = $d->{fixed_list};
      }
      if (ref $d->{boolean_list} && ref ${$d->{boolean_list}}) {
	my $i;
	foreach (@{${$d->{boolean_list}}}) {
	  push @$data2,  { text => $_, type => 'bool', val => \${$d->{val}}->[$i], disabled => $d->{disabled} };
	  $i++
	}
      } else {
	push @$data2, $d
      }
    }
    my $a = $in->ask_from($o->{name}, $page->{name}, $data2, if_($page->{complete}, complete => $page->{complete}));
    if ($a) {
      push @steps, $next if !$page->{ignore} && $steps[-1] ne $next;
      $next = defined $page->{post} ? $page->{post}() : 0;
      defined $o->{pages}{$next} or $next = $page->{next};
    } else {
      $next = pop @steps
    }
    $next or return;
    $page = $o->{pages}{$next}
  }
}

my ($wiz, $err) = new('Drakka');
if ($err) {
    $::Wizard_finished = 1;
    $in->ask_okcancel(N("Error"), translate($err));
    $in->exit;
  }
wizard($wiz->{o});
$in->exit;
