#!/usr/bin/perl

use strict;
use warnings;

use Cwd qw( getcwd );
use File::Find;
    
my $kluisserver;

find (
    # eerste argument is een functie/subroutine die per gevonden item
    # wordt aangeroepen in de folder waar het item staat
    sub {
	my $folder = $File::Find::dir;

	# Overslaan wat al is verwerkt
	$folder =~ m{\b verwerkt \b}ix and return;

	# We willen alleen *bestanden* (geen folders) met
	# een naam die eindigt op .sti
	-f $_ && m{\.sti $}ix or return;

	verwerk ($folder, $_);
	},
    # Overige argumenten is/zijn de plek(ken) waar gezocht moet worden
    glob "/home/kluis/*/stuftax"
    );

stopserver ();

sub startserver
{
    $kluisserver and return; # Already started
    my $cwd = getcwd;
    chdir "/home/kluis/kluishelpdeskgt/prog";
    open $kluisserver, "|-", "./kluisserver";
    chdir $cwd;
    } # startserver

sub stopserver
{
    close $kluisserver;
    undef $kluisserver;
    } # stopserver

sub verwerk
{
    my ($folder, $filename) = @_;

    my ($gemeente, $tijdvak) = ($filename =~ m{^ ([a-zA-Z])+ ([0-9]+) \.ist $}ix);
    $gemeente && $tijdvak > 0 && $tijdvak <= 12 or
	die "$filename voldoet niet aan de gestelde eisen\n";

    (my $verwerkt = $folder) =~ s{stuftax}{stuftax/verwerkt}i;
    (my $logfile = "$verwerkt/$filename") =~ s{\.ist$}{.log}i;
    open my $lh, ">", $logfile or die "Kan logfile $logfile niet openen: $!\n";

    logger ($lh, "Start verwerken $filename");

    startserver (); # doet niets al al gestart
    print $kluisserver "IMPORT_STUFTAX::execute $folder/$filename stuftax04\n";

    logger ($lh, "Einde verwerken $filename");
    close $lh;

    rename $filename, "$verwerkt/$filename";
    } # verwerk

# Deze voegt aan elke eerste regel van een log een tijdstamp toe
sub logger
{
    my ($lh, @msg) = @_;
    my @now = localtime;
    printf $lh "%4d-%02d-%02d %02d:%02d:%02d - ",
	$now[5] + 1900, $now[4] + 1, @now[3, 2, 1, 0];
    print $lh "$_\n" for @msg;
    } # logger
