#!/usr/bin/perl
use strict;
use warnings;

use EBox;
use EBox::Config;
use EBox::Global;
use EBox::ProgressIndicator;
use EBox::Exceptions::Internal;

use Error qw(:try);

EBox::init();

my %params = @ARGV;

my $action = $params{'--action'};
$action or
    throw EBox::Exceptions::Internal('No action provided');

if (($action ne 'saveAllModules') and ($action ne 'revokeAllModules')) {
    throw EBox::Exceptions::Internal("Bad action: $action");
}

my @callParams;
my $progress;

my $progressId = delete $params{'--progress-id'};
if ($progressId) {
    $progress = EBox::ProgressIndicator->retrieve($progressId);
    @callParams = (progress => $progress);
}

try {
    my $global = EBox::Global->getInstance();
    my $audit = $global->modInstance('audit');

    if ($action eq 'saveAllModules') {
        $global->saveAllModules(@callParams);
        $audit->commit();
    } elsif ($action eq 'revokeAllModules') {
        $global->revokeAllModules(@callParams);
        $audit->discard();
    }
} otherwise {
    my $ex = shift @_;

    if ($progress) {
        my $errorTxt = $ex->text();
        if (EBox::Config::boolean('debug')) {
            $errorTxt .= "\n" . $ex->stacktrace();
        }
        $progress->setAsFinished(1, $errorTxt);
    }

    $ex->throw();
};

1;
