#!/usr/bin/perl
use Carp;
use strict;
use warnings;
use Tk;
use Tk::LabFrame;

my $fenetre = new MainWindow(
  -title      => 'Recherche de fichiers',
  -background => 'white',
);

# Affichage de l'heure
my $date_heure = date();
my $label_date = $fenetre->Label(
  -textvariable => \$date_heure,
  -background   => 'white',
  -font         => '{Arial} 16 {bold}',
)->pack(qw/ -pady 20 /);

# État de la recherche du fichier
my $etat_recherche = 'Aucune recherche en cours';
my $label_etat     = $fenetre->Label(
  -textvariable => \$etat_recherche,
  -background   => 'white',
  -foreground   => 'blue',
  -font         => '{Arial} 12 {bold}',
)->pack(qw/ -pady 20 /);

# Cadre de recherche
my $cadre = $fenetre->LabFrame(
  -label      => 'Cadre de recherche',
  -background => 'white',
)->pack(qw/ -pady 20 -padx 20 /);

my ( $fichier_recherche, $repertoire_emplacement );
my $label1 = $cadre->Label( -text => 'Nom du fichier à trouver : ', -background => 'white' );
my $entry_nom_fichier = $cadre->Entry( -textvariable => \$fichier_recherche );
my $label2 = $cadre->Label( -text => 'Emplacement : ', -background => 'white' );
my $entry_emplacement = $cadre->Entry( -textvariable => \$repertoire_emplacement );

my $bouton_emplacement = $cadre->Button(
  -text    => '...',
  -command => sub {
    $repertoire_emplacement = $cadre->chooseDirectory(
      -title     => 'Sélectionner un emplacement',
      -mustexist => 1,
    );
  },
);

# Affichage d'un bouton pour rechercher un fichier
my $bouton = $cadre->Button(
  -text    => 'Recherchez un fichier',
  -command => [ \&recherchez_fichier ],
  -font    => '{Arial} 14 {bold}',
);

$label1->grid( $entry_nom_fichier, '-',                 -sticky => 'nw' );
$label2->grid( $entry_emplacement, $bouton_emplacement, -sticky => 'nw' );
$bouton->grid( '-',                '-',                 qw/ -padx 10 -pady 10 / );

# Centrer ma fenêtre
centrer_widget($fenetre);

# Toutes les secondes, la date et l'heure évoluent
$fenetre->repeat( 1000, sub { $date_heure = date(); } );

MainLoop;

#================================================
# But : Centrer un widget automatiquement
#================================================
sub centrer_widget {
  my ($widget) = @_;

  # Height and width of the screen
  my $largeur_ecran = $widget->screenwidth();
  my $hauteur_ecran = $widget->screenheight();

  # update le widget pour récupérer les vraies dimensions
  $widget->update;
  my $largeur_widget = $widget->width;
  my $hauteur_widget = $widget->height;

  # On centre le widget en fonction de la taille de l'écran
  my $nouvelle_largeur = int( ( $largeur_ecran - $largeur_widget ) / 2 );
  my $nouvelle_hauteur = int( ( $hauteur_ecran - $hauteur_widget ) / 2 );
  $widget->geometry( $largeur_widget . "x" . $hauteur_widget . "+$nouvelle_largeur+$nouvelle_hauteur" );

  $widget->update;

  return;
}

sub date {
  my $time = shift || time;    #$time par defaut vaut le time actuel
  my ( $seconde, $minute, $heure, $jour, $mois, $annee, $jour_semaine, $jour_annee, $heure_hiver_ou_ete )
    = localtime($time);
  $mois  += 1;
  $annee += 1900;

  # On rajoute 0 si le chiffre est compris entre 1 et 9
  foreach ( $seconde, $minute, $heure, $jour, $mois, $annee ) { s/^(\d)$/0$1/; }
  return "$jour/$mois/$annee - $heure:$minute:$seconde";
}

sub recherchez_fichier {

  # Recherchons le fichier
  my $fichier_trouve = -1;
  $etat_recherche = 'Recherche de fichier en cours...';
  $fenetre->update;

  # Lancement de la recherche
  system("trouve_fichier.pl -m $fichier_recherche -d $repertoire_emplacement -o resultat.txt");

  # Lecture du fichier résultat
  open my $fh, '<', 'resultat.txt';
  while (<$fh>) { chomp; $fichier_trouve++; }
  close $fh;
  $etat_recherche = "fichier trouvé : $fichier_trouve fois";
  $fenetre->update;

  return;
}