#!/usr/bin/perl
# vim: set et ts=4 sw=4:
#*****************************************************************************
#
#  Copyright (c) 2014-2017 Angelo naselli <anaselli@linux.it>
#
#  This file is part of manatools
#
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 2, as
#  published by the Free Software Foundation.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
#*****************************************************************************

binmode STDOUT, ':utf8';
use ManaTools::Privileges;
use ManaTools::Shared;
use ManaTools::Shared::Locales;


my $locale_dir = ManaTools::Shared::custom_locale_dir();
my $loc        = ManaTools::Shared::Locales->new(
    domain_name => 'manatools',
    dir_name    => $locale_dir,
);

my %modules = (
        log     => {
            exec  => '/usr/bin/manalog',
            descr => $loc->N("manalog: journalctl log reader"),
        },
        user    => {
            exec  => '/usr/bin/manauser',
            descr => $loc->N("manauser: user manager"),
        },
        service => {
            exec  => '/usr/bin/manaservice',
            descr => $loc->N("manaservice: service manager"),
            user_mode => 1,
        },
        dm      => {
            exec => '/usr/bin/manadm',
            descr => $loc->N("manadm: login manager configuration"),
        },
        clock   => {
            exec => '/usr/bin/manaclock',
            descr => $loc->N("manaclock: date/time manager"),
        },
        host    => {
            exec => '/usr/bin/manahost',
            descr => $loc->N("manahost: hosts manager"),
        },
        pan     => {
            exec => '/usr/bin/mpan',
            descr => $loc->N("mpan: admin panel"),
        },
        proxy   => {
            exec => '/usr/bin/manaproxy',
            descr => $loc->N("manaproxy: proxy manager"),
        },
        rpm   => {
            exec => '/usr/bin/rpmdragora',
            descr => $loc->N("rpmdragora: rpm install manager"),
        },
        update  => {
            exec => '/usr/bin/dragoraUpdate',
            descr => $loc->N("dragoraUpdate: rpm update manager"),
        },
        wall  => {
            exec => '/usr/bin/manawall',
            descr => $loc->N("manawall: firewall manager"),
        },
);

usage() if ManaTools::Shared::help_requested() ;
usage() if scalar(@ARGV) < 1;

my $cmd = $ARGV[0];

eval {

    die $loc->N("Command <%s> not found!\n", $cmd) if !defined($modules{$cmd});

    my $mod =  $modules{$cmd}->{exec};
    shift(@ARGV);

    if(!$modules{$cmd}->{user_mode} && is_root_capability_required()) {
        system("/usr/bin/pkexec", $mod, @ARGV);
    } else {
        system($mod, @ARGV);
    }
};
if ( $@ ) {
    print "\n" . $loc->N("ERROR: ") . $@ ;
    usage(),
}

#=============================================================

=head2 usage


=head3 DESCRIPTION

usage print the mana usage help

=cut

#=============================================================

sub usage {
    print "\n";
    print $loc->N("Usage mana --help | -h        print this help\n");
    print $loc->N("Usage mana <command> [args...]\n\n");
    print $loc->N("valid <commands>:\n");

    foreach my $key (sort keys %modules) {
        # lenght + 2 chars "<" and ">"
        print "<" . $key . (length $key >= 6 ? ">\t" : ">\t\t") . $modules{$key}->{descr} . "\n";
    }

    print "\n";
    exit(0);
}