#!/usr/bin/perl

use lib '/usr/lib/libDrakX';
use lib '/usr/share/xosconfig';


BEGIN { push @::textdomains, 'drakxosconfig' }

use standalone;
use common;
use mygtk2 qw(gtknew);
use ugtk2 qw(:wrappers :create);
use interactive::gtk;
use xtreemos::srds;
use xtreemos;
use xtreemos::config;

$xtreemos::xosconfig_get_func = \&xtreemos::config::get_config;
$xtreemos::xosconfig_set_func = \&xtreemos::config::set_config;
$xtreemos::xosconfig_check_func = \&xtreemos::config::check_config;
$xtreemos::xosconfig_values_func = sub { my $r = &xtreemos::config::get_values_list(@_); $r ? @$r : (); };
$xtreemos::xosconfig_info_func = \&xtreemos::config::get_description;

my $in = 'interactive'->vnew('su');

# declaration of icons/images
my $icon_path = "/usr/share/libDrakX/pixmaps/";
my $iconimage = "$icon_path/drakxos.png";
my $iconlog = "$icon_path/iconlog.png";
my $iconhelp = "$icon_path/help.png";


# the splash
my $window_splash = Gtk2::Window->new('popup');
$window_splash->signal_connect(delete_event => \&quit_global);
$window_splash->set_position('center_always');
my $filename = "$icon_path/drakxos_splash.png";
my $image = Gtk2::Image->new_from_file ($filename);
$window_splash->add($image);
$window_splash->show_all;
gtkflush();

# the main window
my $window = ugtk2->new(N("XtreemOS configuration"));
$::main_window = $window->{real_window};
$window->{rwindow}->set_size_request(675, 500);
$window->{rwindow}->set_position('center');
my $W = $window->{window};
$W->signal_connect(delete_event => sub { ugtk2->exit });

# menu items
sub get_items() {
    my @items = (
                 [ N("/_File"), undef, undef, undef, '<Branch>', ],
                 [ N("/_File") . N("/_Quit"), N("<control>Q"), \&quit_all, 1, '<Item>', ],

                 [ N("/_Help") . N("/_Xtreemos Documentation"), undef, sub {
                     $in->do_pkgs->ensure_is_installed('xtreemos_doc', '/usr/share/doc/xtreemos_doc/html/Guide.html');
                     $in->do_pkgs->ensure_is_installed('mozilla-firefox', '/usr/bin/firefox');
                     system("/usr/bin/www-browser /usr/share/doc/xtreemos_doc/html/Guide.html &")
                     },
                   1, '<Item>', ],
                 [ N("/_Help") . N("/_Xtreemos Overview"), undef, sub {
                     system("/usr/sbin/drakxos &")
                     },
                   1, '<Item>', ],


                 [ N("/_About") . N("/_Report Bug"), undef, sub { 
		     $in->do_pkgs->ensure_is_installed('mozilla-firefox', '/usr/bin/firefox');
		     run_program::raw({ detach => 1 }, '/usr/bin/www-browser', 'https://gforge.inria.fr/tracker/?group_id=411') }, 1, '<Item>', ],
                 [ N("/_About") . N("/_About..."), undef, sub {
               my $license = formatAlaTeX(translate($::license));
               $license =~ s/\n/\n\n/sg; # nicer formatting
               my $w = gtknew('AboutDialog', name => N("Drakxosconfig"),
                              version => '2009',
                              copyright => N("Copyright (C) %s by Mandriva/XtreemOS", '2009'),
                              license => $license, wrap_license => 1,
                              comments => N("This is a simple tool to easily configure some XtreemOS services."),
                              website => 'http://www.xtreemos.eu',
                              website_label => N("XtreemOS"),
                              authors => 'Antoine Ginies <aginies@mandriva.com>
Nicolas Vigier <nvigier@mandriva.com>',
                              translator_credits =>
                                #-PO: put here name(s) and email(s) of translator(s) (eg: "John Smith <jsmith@nowhere.com>")
                                N("_: Translator(s) name(s) & email(s)\n"),
                              transient_for => $window->{real_window}, modal => 1, position_policy => 'center-on-parent',
                          );
               $w->show_all;
               $w->run;
                 }, 1, '<Item>', ],
                 );
    return @items;
}

# main quit from menu
sub quit_all() {
  ugtk2->exit;
}

# log tab
my $logL = Gtk2::Label->new();
$logL->set_markup('<span foreground="black"><b>System Log</b></span>');
my $command = "tail -f /var/log/messages /var/log/auth.log /var/log/xtreemfs/* /var/log/cdaserver/*";
my $boxa = gtkpack_(Gtk2::VBox->new,
		    1, my $log_scroll = create_scrolled_window(my $log_w = gtkset_editable(Gtk2::TextView->new, 0)),
    );
my $stop_running = xtreemos::gtktext_get_log($command, $log_w, $log_scroll, "1");

# notebook creation
my $nb = Gtk2::Notebook->new;

sub add2nb {
    my ($n, $title, $image, $book) = @_;
    my $titleL = Gtk2::Label->new($title);
    $titleL->set_markup('<span foreground="black"><b>' . $title . '</b></span>');
    $n->append_page($book, gtkshow(gtkpack_(Gtk2::HBox->new(0,0),
                                            0, Gtk2::Image->new_from_file($image),
                                            0, $titleL,
				   ),
		    ),
	);
    # not available :/
    #$n->set_tab_detachable($book, 0);
    $book->show;
}

# menu
my @items = get_items();
my $factory = Gtk2::ItemFactory->new('Gtk2::MenuBar', '<main>', undef);
$factory->create_items('menu', @items);
my $menu = $factory->get_widget('<main>');


# notebooks
add2nb($nb, N("Overview"), $iconhelp, xtreemos::basic_explanations());
xtreemos::config::module_exists("srds") &&
	add2nb($nb, N("SRDS"), $iconimage, xtreemos::create(xtreemos::read("srds"), "srds"));
xtreemos::config::module_exists("xvoms") &&
	add2nb($nb, N("XVOMS"), $iconimage, xtreemos::create(xtreemos::read("xvoms"), "xvoms"));
xtreemos::config::module_exists("rss") &&
	add2nb($nb, N("RSS"), $iconimage, xtreemos::create(xtreemos::read("rss"), "rss"));
xtreemos::config::module_exists("xosd") &&
	add2nb($nb, N("XOSD"), $iconimage, xtreemos::create(xtreemos::read("xosd"), "xosd"));
xtreemos::config::module_exists("xtreemfs-osd") &&
	add2nb($nb, N("OSD"), $iconimage, xtreemos::create(xtreemos::read("xtreemfs-osd"), "xtreemfs-osd"));
xtreemos::config::module_exists("xtreemfs-mrc") &&
	add2nb($nb, N("MRC"), $iconimage, xtreemos::create(xtreemos::read("xtreemfs-mrc"), "xtreemfs-mrc"));
xtreemos::config::module_exists("xtreemfs-dir") &&
	add2nb($nb, N("DIR"), $iconimage, xtreemos::create(xtreemos::read("xtreemfs-dir"), "xtreemfs-dir"));

# add the log view
gtkappend_page($nb, gtkpack_(gtkset_border_width(Gtk2::HBox->new, 0),
			     1, $boxa,
	       ),
               gtkshow(gtkpack_(Gtk2::HBox->new(0,0),
                                0, Gtk2::Image->new_from_file($iconlog),
                                0, $logL,
		       ),
	       ),
    );


##########
# main interface
$nb->set_show_border(0);
$W->add(gtkpack_(Gtk2::VBox->new(0,0),
		 0, $menu,
                 1, $nb,
                 ),
        );

$window_splash->destroy;
$W->show_all;
Gtk2->main;
