#!/usr/bin/perl

use strict;
use lib qw(/usr/lib/libDrakX);
use standalone;

use common;
#use any;

use ugtk2 qw(:all);

use interactive;

use Libconf::Glueconf::Samba;
use Libconf::GUI::Gtk2 qw(:generators);

#use POSIX qw(mktime ceil);
#use USER;
#use Devel::Peek;
#use Gtk2::Gdk::Keysyms;

# for debugging purpose
use Data::Dumper;

# we ask glueconf to give us the structure representing /etc/samba/smb.conf
my $samba = new Libconf::Glueconf::Samba('/etc/samba/smb.conf');


my $window = Gtk2::Window->new('toplevel');
$window->signal_connect(delete_event => sub { ugtk2->exit(0) });
$window->set_position('center');
$window->set_title(N('swat-clone, a non-destroying swat clone'));
$window->set_size_request(500, 400);

my $notebook = new Gtk2::Notebook;

gtkadd($window,
       gtkpack_(Gtk2::VBox->new(0,10),
                0, 'swat clone',
                1, $notebook,
                0, gtkadd(gtkset_layout(Gtk2::HButtonBox->new, 'end'),
                          gtksignal_connect(new Gtk2::Button(N("OK")),
                                            clicked => sub { save_exit(); }),
                          gtksignal_connect(new Gtk2::Button(N("Cancel")),
                                            clicked => sub { cancel_exit(); })
                         )
               )
      );

my %BASIC_GLOBAL_KEYWORDS = (
                             'Base Options' => [
                                                'workgroup',
                                                'netbios name',
                                                'server string',
                                                'interfaces',
                                               ],
                             'Security Options' => [
                                                    'security',
                                                    'encrypt passwords',
                                                    'update encrypted',
                                                    'map to guest',
                                                    'guest account',
                                                    'hosts allow',
                                                    'hosts deny',
                                                   ],
                             'Logging Options' => [
                                                   'log level',
                                                   'log file',
                                                   'max log size',
                                                  ],
                             'Tuning Options' => [
                                                  'socket options',
                                                 ],
                             'Browse Options' => [
                                                  'os level',
                                                  'preferred master',
                                                  'local master',
                                                  'domain master',
                                                 ],
                             'WINS Options' => [
                                                'dns proxy',
                                                'wins server',
                                                'wins support',
                                               ],
                            );
my %current_global_keywords = %BASIC_GLOBAL_KEYWORDS;

#     my $data = Libconf::data{$struct->{libconf}{template_name}};
#     gtkpack__(Gtk2::HBox->new(0,5),
#               if_($args->{with_help}, gtksignal_connect(new Gtk2::Button(N('Help')), clicked => sub { })),
#               $args->{atom_label} ? $args->{atom_label} : $args->{atom_name},

my $globals = gtkpack_(Gtk2::VBox->new(0,5),
                        0, 'Global Variables',
                        0, gtkadd(gtkset_layout(Gtk2::HButtonBox->new, 'start'),
                               gtksignal_connect(new Gtk2::Button(N('Commit changes')),
                                                 clicked => sub { save() }),
                               gtksignal_connect(new Gtk2::Button(N('Reset values')),
                                                 clicked => sub { set_defaults(%current_global_keywords); }),
                               gtksignal_connect(new Gtk2::Button(N('Advanced view')),
                                                 clicked => sub { }),
                              ),
                        1, create_scrolled_window(gtkpack__(Gtk2::VBox->new(0,5),
                                  map {
                                      my $table = Gtk2::Table->new(0, 4, 0);
                                      $table->set_col_spacings(5);
                                      $table->set_row_spacings(5);
                                      my $count = 0;
                                      foreach (@{$current_global_keywords{$_}}) {
                                          $table->attach(Gtk2::Label->new(N('Help')), 0, 1, $count, $count + 1,
                                                         ['fill', 'expand'],
                                                         ['shrink', 'shrink'],
                                                         0, 0);
                                          $table->attach(gtkpack_(Gtk2::HBox->new(0,0),
                                                                  1, Gtk2::HBox->new(0,0),
                                                                  0, Gtk2::Label->new($_)
                                                                 ),
                                                         1, 2, $count, $count + 1,
                                                         'fill',
                                                         ['shrink', 'shrink'],
                                                         0, 0);
                                          $table->attach(my $widget=getBestWidget($samba, "{global}{'$_'}"), 2, 3, $count, $count + 1,
                                                         ['fill', 'expand'],
                                                         ['shrink', 'shrink'],
                                                         0, 0);
                                          $table->attach(gtksignal_connect(new Gtk2::Button(N('Set default')),
                                                                           clicked => sub {
                                                                               $widget->set_default();
                                                                               #set_defaults(%current_global_keywords);
                                                                           }),
                                                         3, 4, $count, $count + 1,
                                                         ['fill', 'expand'],
                                                         ['shrink', 'shrink'],
                                                         0, 0);
                                          $count++;
                                      }
                                      gtkset_border_width(gtkset_shadow_type(gtkadd(Gtk2::Frame->new($_), $table), 'etched_out'), 5);
                                  } ('Base Options',
                                     'Security Options',
                                     'Logging Options',
                                     'Tuning Options',
                                     'Browse Options',
                                     'WINS Options')
                                 ), undef, 'none'
                           )
                       );

foreach ([$globals, N('GLOBALS')],
         [my $shares, N('SHARES')],
         [my $printers, N('PRINTERS')],
         [my $wizard, N('WIZARD')],
         [my $status, N('STATUS')],
         [my $view, N('VIEW')],
         [my $password, N('PASSWORD')]) {
    $_->[0] ||= new Gtk2::Button($_->[1]);
    $notebook->append_page(
                           $_->[0],
                           new Gtk2::Label($_->[1])
                          );
}
# we make everything visible in the window
$window->show_all();

#and we start the Gtk2 main loop.
Gtk2->main;


sub set_defaults {}

sub save {
    #$samba->writeconf();
    
}

sub save_exit {

    # we ask the $samba object to write itself back to the real config file
    # he knows everything about himself, so no need to give him any arg.
    # the file is rewritten, without loosing any information or comments.
    save();

    # we exit the gtk2 main loop
    Gtk2->main_quit();
}

# the function called when the user clicks on the Cancel button
sub cancel_exit {

    # we exit the gtk2 main loop
    Gtk2->main_quit();
}
