#!/usr/bin/env perl
use strict;
use warnings;
use diagnostics;
use sigtrap qw/handler signal_handler normal-signals/;
use Tie::Syslog;
use My::Savepid qw(savepid);
use My::parser::parser;
use Glib;

my $config_file = '/usr/local/etc/parserfilter.conf';
my $pidfile	= '/var/run/parserfilter.pid';
my $program	= $0;

unless(-f $config_file) {
	die "Configuration file $config_file does not exist";
}

my $x;
my $loop	= Glib::MainLoop->new;
my $parser	= My::parser::parser->new($config_file);
my $time	= Glib::Timeout->add(1000, \&loopsie);

if(my $tp = fork) {
	exit 0;
} else {
	my $pid		= $$;
	$x		= tie *STDERR, 'Tie::Syslog', 'local0.err',$program,'pid','unix';
	$x->ExtendedSTDERR();
	&savepid($pid,$pidfile);
	close STDIN;
	$parser->load_parsers;
	$loop->run;
}

sub loopsie {
	my $result = $parser->parse_all;
	return 1 if($result);
	return 0;
}

sub signal_handler {
	my $signal = shift;
	if($signal eq 'HUP') {
		$parser->{'config'}->{'logger'}->reload_log;
		$parser->{'config'}->{'logger'}->log('Log reloaded');
	} else {
		$loop->quit;
		$parser->{'config'}->{'logger'}->log("$program stopped");
	}
}
