#!/usr/bin/perl

use strict;
use warnings;

use lib './lib';
use lib '../logoved.git/lib';
use lib '../Logoved-Stream.git/lib';
use lib $ENV{'HOME'}.'/src/repo/logoved.git/lib';
use lib $ENV{'HOME'}.'/src/repo/Logoved-Stream.git/lib';
use parent 'Source::Shared::CLI';
use Logoved::DB;
use Logoved::Stream::LogParser;
use Logoved::Stream::Out::Hasher;
use Logoved::DB::Stream::Listener::Factory;

my $opt_error=1;
my $opt_success=1;
my $opt_unmatched=1;
sub cli_container_ref {['Logoved::DB']}
our @LONGOPT=(
    'success!' => \$opt_success,
    'error!' => \$opt_error,
    'unmatched!' => \$opt_unmatched,
    );

__PACKAGE__->get_and_process_cli_options();

my $ruleset=&Logoved::DB::get_fail_ruleset();
my $listeners_factory=Logoved::DB::Stream::Listener::Factory->instance(ruleset=>$ruleset);
my $parser=Logoved::Stream::LogParser->new(
    listeners_factory => $listeners_factory,
    parser_class => 'Logoved::Stream::Out::Hasher',
    );
$listeners_factory->match_handler(\&handle_file_matches);

map {$parser->parse_arg($_)} @ARGV;

if ($opt_unmatched) {
    foreach my $file (@{$listeners_factory->not_matched}) {
	print "NOT MATCHED: $file\n";
    }
}

foreach my $file (@{$listeners_factory->successful}) {
    print "SUCCESSFUL: $file\n";
}


sub handle_file_matches {
    my ($factory, $file, $matches)=@_;
    #use Data::Dumper;print Dumper($matches);
    foreach my $match (@$matches) {
	my $status=$match->status;
	if ($opt_error and (not $status or $status eq 'error')) {
	    print $match->description;
	} elsif ($opt_success and $status and $status eq 'success') {
	    print $match->description;
	} else {
	    die "Oops! can't be";
	}
    }
}
