#!/usr/bin/perl

use strict;
use warnings;
use open ':std', ':encoding(UTF-8)';

use FileHandle;
use Perl::Tidy;
use File::Find::Rule;
use Perl::Critic(qw(critique));

use lib '/app/tools/common/lib';
use Common::ProgressBar;

eval {
    my $policy = 'Perl::Critic::Policy::' . shift @ARGV;
    my $critic = Perl::Critic->new( '-single-policy' => $policy );

    print "Analyzing Perl policy $policy\n";

    my $dir = '/app/tools/';
    my $perlfiles;
    push @{$perlfiles}, File::Find::Rule->file->name(qr/\.(pm)$/)->in($dir);

    my $bar = Common::ProgressBar->new( scalar @{$perlfiles}, 'Analyzing' );
    foreach my $file ( @{$perlfiles} ) {
        my $violations = [ $critic->critique($file) ];
        if ( scalar @{$violations} ) {
            print "$file has " . ( scalar @{$violations} ) . " violation(s)\n";
        }
        $bar->update();
    }
    $bar->finish;

};
if ($@) {
    print STDERR $@;
}
