#!/usr/bin/perl

use strict;
use warnings;

use EBox::AntiVirus;
use English qw(-no_match_vars);

use constant { 
  ALLOWED_USER => 'clamav'
};

my @VALID_EVENTS = qw(update error outdated);

_checkUser();
my ($event, $extraParam) = _getParams();
_writeEventFile($event, $extraParam);


sub _writeEventFile
{
  my ($event, $extraParam) = @_;

  EBox::AntiVirus->notifyFreshclamEvent($event, $extraParam);
}

sub _getParams
{
  my $event = _event();

  my $extraParam = undef;
  if ($event eq 'outdated') {
    $extraParam = _newVersion();
  }

  return ($event, $extraParam);
}

sub _event
{
  my $cliEvent = shift   @ARGV;

  my $isValidEvent =  grep { $_ eq $cliEvent} @VALID_EVENTS;
  if  ($isValidEvent) {
    return $cliEvent;
  }

  die ("Not a valid freshclam event: $cliEvent");
}


sub _newVersion
{
  my $cliNewVersion = shift @ARGV;
  if ($cliNewVersion =~ m/^[\.\d\w]+$/) {
    return $cliNewVersion;
  }
  else {
    die ("Version from outdated event not valid: $cliNewVersion");
  }
}


sub _checkUser
{
  if (not ($EUID == getpwnam(ALLOWED_USER))) {
    die "Only " . ALLOWED_USER . " is allowed to run this script";
  }
}

1;
