#!/usr/bin/perl

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

use standalone;     #- warning, standalone must be loaded very first, for 'explanations'

use common;
use interactive;
use modules;
use mouse;
use c;


local $_ = join '', @ARGV;

/-h/ and die "usage: mousedrake [--auto] [--testing]\n";

$::auto = /-auto/;
$::testing = /-testing/;

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

modules::mergein_conf('/etc/modules.conf') if -r '/etc/modules.conf';

undef $::Plug;
begin:
my $mouse = mouse::read();
if (!$::noauto) {
    my $probed_mouse = mouse::detect();
    $mouse = $probed_mouse if !$mouse->{XMOUSETYPE} || !$probed_mouse->{unsafe};
}

$::isEmbedded and kill 'USR2', $::CCPID;
if (!$mouse || !$::auto) {
    $mouse ||= mouse::fullname2mouse("serial|Generic 2 Button Mouse");
    if ($::isEmbedded && $in->isa('interactive::gtk')) {
	#- HACK: waiting for the ask_from_treelistf to attach itself
	#- and adding the nice test mouse to it
	Gtk->timeout_add(100, sub {
			     defined $::Plug && defined $::Plug->child or return 1;
			     mouse::test_mouse_standalone($mouse,$::Plug->child);
			     0;
			 });
    }
    my $name = $in->ask_from_treelistf('mousedrake', _("Please, choose the type of your mouse."), '|',
				       sub { join '|', map { translate($_) } split '\|', $_[0] },
				       [ mouse::fullnames ], 
				       $mouse->{type} . '|' . $mouse->{name});
    $name or $::isEmbedded ? do { kill('USR1', $::CCPID); goto begin } : $in->exit(0);
    my $mouse_chosen = mouse::fullname2mouse($name);
    $mouse = $mouse_chosen if !($mouse->{type} eq $mouse_chosen->{type} && $mouse->{name} eq $mouse_chosen->{name});

    if ($mouse->{device} eq "usbmouse") {
	modules::load_category('bus/usb') or die 'no usb bus found\n';
	modules::load(qw(hid mousedev usbmouse));
    }

    $mouse->{XEMU3} = 'yes' if $mouse->{nbuttons} < 3 && (!$::noauto || $in->ask_yesorno('', _("Emulate third button?"), 1));

    $mouse->{device} = $in->ask_from_listf(_("Mouse Port"),
					   _("Please choose on which serial port your mouse is connected to."),
					   \&mouse::serial_port2text,
					   [ mouse::serial_ports ],
					   $mouse->{device},
					  ) || goto begin if $mouse->{type} eq 'serial';
}

mouse::write_conf($in, $mouse, 1);
system('service', 'gpm', 'restart') if -e '/var/lock/subsys/gpm';

$::isEmbedded ? kill('USR1', $::CCPID) : $in->exit(0);
goto begin;