#!/usr/bin/perl
use strict;
use Gtk2 -init;
use Gtk2::GladeXML;
use UI::Dialog;
use UI::Dialog::Backend::Zenity;
use Switch;

## Variables Declaration

my($program, $main_window, $background_path, $exit_button, $path_images, $pid, $label_number_of_seconds, $number_of_seconds, $label_status, $about_window, $about, $preferences_window, $filechooserbutton, $file_choose);

my(@status, $home_directory, $path, $path_pid, $last_background);

## From Preferences window
my($return_value_widget, $type_of_change_widget, $type_of_change, $last_change);
my $return_value = 1;

&trash;

## Loading from UI::Dialog
my $window_dialogs = new UI::Dialog::Backend::Zenity(title => "Gbackground",
						       height => 45, width => 50, 
						       listheight => 5,
						       order => [ 'zenity', 'xdialog', 'gdialog']
						       );

# Loading a window

if (-e 'glade/gbackground.glade'){
	$program = Gtk2::GladeXML->new('glade/gbackground.glade');
} else {
	$program = Gtk2::GladeXML->new('/usr/share/gbackground/gbackground.glade');
}

# Window loading

&load_widgets;

# Signals
$program->signal_autoconnect_from_package('main');

## Changes check

&check_status;

Gtk2->main;

## Subroutines ##
sub trash {
	@status = ("<span foreground=\"blue\">Running</span>", "<span foreground=\"red\">Stopped</span>");
	$home_directory = $ENV{HOME};
	$path_pid = $home_directory . "/.gbackground" . "/gbackground.pid";
	$last_change = 'stretched';
}
sub load_widgets {
	$main_window = $program->get_widget('main_window');
	$preferences_window = $program->get_widget('preferences_window');
	$label_number_of_seconds = $program->get_widget('select_seconds');
	$label_status = $program->get_widget('label_program_status');
	$about_window = $program->get_widget('about_window');
	$about = $program->get_widget('about_window');
	$return_value_widget = $program->get_widget('keep_last_bground_combobox');
	$type_of_change_widget = $program->get_widget('background_options_select');
	$filechooserbutton = $program->get_widget('filechooserbutton');
	$filechooserbutton->set_current_folder_uri("/usr/share/images/desktop-base/");
}

sub check_status {
	if(-e $path_pid){
	        $label_status->set_markup("@status[0]");
	}else{
	        $label_status->set_markup("@status[1]");
	}
}

sub on_start_button_event {
	$path_images = $filechooserbutton->get_filename;
	$last_background = `gconftool-2 --get /desktop/gnome/background/picture_filename`;
	$last_background =~ s/\s/\\ /g;
	if(-e "$path_pid"){
		$window_dialogs->error(title => 'Error!!', text => 'Gbackground <b>is already</b> working');
		}
	else{
		if(-e $path_images){
			$number_of_seconds = $label_number_of_seconds->get_text();
			$path_images =~ s/\s/\\ /g;
			if(-e './gbackgroundD'){
				system("perl ./gbackgroundD \"$path_images\" $number_of_seconds $last_change \&");
			} else {
				system("perl /usr/share/gbackground/gbackgroundD \"$path_images\" $number_of_seconds $last_change \&");
			}
			
			sleep 1; # Esto es por que muchas veces tarda en crear el gbackground.pid
			$label_status->set_markup("@status[0]") if(-e "$path_pid");
			$window_dialogs->msgbox(title => "Daemon Gbackground", text => 'Gbackground has started <b>successfully</b>');	
		}
		else{
			$window_dialogs->error(title => "Error, dir doesn't exist", text => 'The directory that you introduced <b>is not valid</b>, please verify it and try again');	
		}
	}
}
sub on_stop_button_event {
	if(-e "$path_pid"){
		open(ARCHIVO_PID, "$path_pid");
		while(<ARCHIVO_PID>){
			$pid = $_;
		}
		system("kill -9 $pid");
		system("rm -f $path_pid");
		if($return_value == 1){
				system("gconftool-2 -t str -s /desktop/gnome/background/picture_filename $last_background");
		}
		$window_dialogs->msgbox(title => "Daemon Gbackground", text => 'Gbackground has been <b>stopped</b> successfully'); 
		$window_dialogs->error(title => 'Error!!', text => 'Error, it was not possible to stop Gbackground. Probably because it <b>is not</b> running') if(-e "$path_pid");
	}else{
		$window_dialogs->error(title => 'Error!!', text => 'Gbackground <b>is not</b> running');	
	}
	&check_status;
}

sub on_preferences_accept_button_event {
	$return_value = $return_value_widget->get_active;
	$last_change = $type_of_change_widget->get_active_text();
	$preferences_window->hide;
}

## Para que cuando cierren las ventanas y las vuelvan a abrir no desaparezcan??
sub on_about_delete_event {
    my $w = shift;
    $w->hide;
    1; 
}

sub on_preferences_delete_event {
    my $w = shift;
    $w->hide;
    1; 
}

sub on_main_window_delete_event {Gtk2->main_quit;}
sub on_exit_menu_event {Gtk2->main_quit;}
sub on_quit_event {Gtk2->main_quit;}
sub on_quit_button_event {Gtk2->main_quit;}
sub on_about_menu_event {$about->present;}
sub on_preferences_event {
	my $value = $type_of_change_widget->set_active("1");
	$preferences_window->show_all;
}
sub on_preferences_cancel_button_event {$preferences_window->hide;}
sub on_about_close_button_event {$about->hide;}
sub on_about_response_event { $about->hide;}
