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

unless($> == 0){
     system("/usr/bin/gksu -u root \"/home/agm/Proyectos/macchanger-gtk/macchanger-gtk\"");
     die("You must be root for use macchanger-gtk\n");
}

### Declarando variables
my($programa, $ventanas_dialogs, $ventana_principal, $ventana_informacion, $acerca_de, $menu_opcion, $entrada1, $etiqueta1, $entrada_interfaz, $etiqueta10, $etiqueta11, $lista, $vista_texto, $vista_texto1, $etiqueta_mac);

$programa = Gtk2::GladeXML->new('glade/macchanger-gtk.glade');
$ventanas_dialogs = new UI::Dialog::Backend::Zenity(
                                title => "Gbackground",
                                height => 45,
                                width => 50,
				            listheight => 5,
				            order => [ 'zenity', 'xdialog', 'gdialog']
			                 );

$programa->signal_autoconnect_from_package('main');

&cargar_widgets;

Gtk2->main;

sub cargar_widgets {
     $ventana_principal = $programa->get_widget('ventana_principal');
     $entrada1 = $programa->get_widget('entrada1');
     $etiqueta1 = $programa->get_widget('etiqueta1');
     $menu_opcion = $programa->get_widget('menu_opcion');
     $entrada_interfaz = $programa->get_widget('entrada_interfaz');
     $ventana_informacion = $programa->get_widget('ventana_informacion');
     $etiqueta10 = $programa->get_widget('etiqueta10');
     $etiqueta11 = $programa->get_widget('etiqueta11');
     $acerca_de = $programa->get_widget('acerca_de');
     $lista = $programa->get_widget('lista_de_vendedores');
     $vista_texto = $programa->get_widget('vista_texto');
     $vista_texto1 = $programa->get_widget('vista_texto1');
     $etiqueta_mac = $programa->get_widget('etiqueta_mac');
}

sub mac {
     my $interfaz = $entrada_interfaz->get_text();
     if(@_[0] eq "solo_mac"){
     	open(ARCHIVO, "/sys/class/net/$interfaz/address");
		my $mac_actual;
		while(<ARCHIVO>){
	     	$mac_actual = $_;
	  	}
	  	close(ARCHIVO);
	  	return $mac_actual;
     }
     open(ARCHIVO, "/sys/class/net/$interfaz/address");
     while(<ARCHIVO>){
          $etiqueta_mac->set_markup("Now your MAC in $interfaz is: <span foreground=\"red\">$_</span>");
     }
     close(ARCHIVO);
}

sub captura_de_informacion {
     my $interfaz = $entrada_interfaz->get_text();
     return $interfaz if($interfaz);
     $ventanas_dialogs->error(title => "Error, not network interface", text => 'Please give the network interface that you want change the MAC address');
     return 1;
}

sub esconder {
     $entrada1->hide;
     $etiqueta1->hide;
}

sub on_another_activate {&esconder;}
sub on_endding_activate {&esconder;}
sub on_random_activate {&esconder;}
sub on_another_same_kind_activate {&esconder;}
sub on_specific_mac_activate {
     $entrada1->show_all;
     $etiqueta1->show_all;
}

sub on_boton_cambiar_clicked {
     my $interfaz = &captura_de_informacion;
     if($interfaz eq 'lo' || $interfaz eq 'sit0'){
          $ventanas_dialogs->error(title => "Error, interface unsopported", text => 'This interface don\'t support change the MAC Address');
	  return $ventana_principal->show_all;
     }
     my $id = $menu_opcion->get_history();
     return 0 if $interfaz == 1;
     my($resultado, @posible_error);
     chomp($resultado = `/usr/bin/macchanger --endding $interfaz`) if($id == 0);
     chomp($resultado = `/usr/bin/macchanger --another $interfaz`) if($id == 1);
     chomp($resultado = `/usr/bin/macchanger -A $interfaz`) if($id == 2);
     chomp($resultado = `/usr/bin/macchanger --random $interfaz`) if($id == 3);
     if($id == 4){
         my $nueva_mac = $entrada1->get_text();
	 if($nueva_mac eq ''){
              $ventanas_dialogs->error(title => "Error, not MAC Address", text => 'Please write a MAC Address that yo want change');
              return $ventana_principal->show_all;
	 }          
	 if($nueva_mac =~ /^\w\w:\w\w:\w\w:\w\w:\w\w:\w\w$/){
              chomp($resultado = `/usr/bin/macchanger --mac $nueva_mac $interfaz`);
	 }else{
              $ventanas_dialogs->error(title => "Error, MAC Address incorrect", text => 'The MAC Address is incorrect please write a correct MAC Address');
	      return $ventana_principal->show_all;
	 }
     }
     if($resultado eq /set device name: No such device/){
          $ventanas_dialogs->error(title => "Error, don\'t exist network interface", text => 'Please give a correct network interface because it don\'t exist or is up. The interface <b>must</b> be down');
     }
     elsif($resultado eq /.*interface up or not permission.*/){
          $ventanas_dialogs->error(title => "Error, Operation not permitted", text => 'Error, probably you don\'t have permission. Are you root?');
     }
     else{
          my @mac = split('\n', $resultado); 
          $etiqueta10->set_markup(@mac[0]);
          $etiqueta11->set_markup(@mac[1]);
          $ventana_informacion->show_all;
	  &mac;
     }
}

sub on_boton_lista_clicked {
     $lista->show_all;
     my $buffer = Gtk2::TextBuffer->new;
     open(LISTA, '/usr/share/macchanger/OUI.list');
     while(<LISTA>){
          $buffer->insert_at_cursor("$_");
     }
     close(LISTA);
     $vista_texto->set_buffer($buffer);
     $buffer = Gtk2::TextBuffer->new;
     open(LISTA, '/usr/share/macchanger/wireless.list');
     while(<LISTA>){
          $buffer->insert_at_cursor("$_");
     }
     close(LISTA);
     $vista_texto1->set_buffer($buffer);
}
sub on_boton_aceptar_clicked {$lista->hide;}
sub on_acerca_de1_activate {$acerca_de->show_all;}
sub on_boton_acept_clicked {$ventana_informacion->hide}
sub on_dialog_delete_event {
	my $w = shift;
	$w->hide;
	1;

}
sub on_ventana_principal_delete_event {Gtk2->main_quit;}
sub on_salir2_activate {Gtk2->main_quit;}
sub on_boton_salir_clicked {Gtk2->main_quit;}
