#!/usr/bin/perl -w
use strict; # $Id: monotifier 59 2019-07-14 09:14:38Z abalama $

=head1 NAME

monotifier - extension for the monm notifications 

=head1 SYNOPSIS

    monotifier [options] [commands [args]]
    monotifier -u username -s "Subject" < /path/to/message/file.txt
    monotifier show
    monotifier show <ID>
    monotifier remove <ID>
    monotifier clean
    monotifier truncate

=head1 OPTIONS

=over 4

=item B<-c CONFIG_FILE, --config=CONFIG_FILE>

Full path of the monm configuration file. The configuration file allows determine the
basic default settings, which will use the system if it fails to specify additional
configuration files in $CONFDIR directory. The default system
path /etc/monm/monm.conf

=item B<-D DATADIR, --datadir=DATADIR, --dir=DATADIR>

The directory of temporary files.

Default: system temp directory

=item B<-d, --debug>

Enable debug mode. In this mode, debug messages are displayed on the screen

=item B<-h, --help>

Show short help information and quit

=item B<-H, --longhelp>

Show long help information and quit

=item B<-l, --log>

Enabling write debug information to syslog or user log file.

Do not confuse the debug logging from regular logging to a file monm.log.
Regular logging allows you to store information in monm.log on the progress of the processes 
module, whereas debug logging for debugging of the internal components 
of the module.

To control the level of debugging see parameter LogEnable and LogLevel.

=item B<-s SUBJECT, --subject=SUBJECT, --subj=SUBJECT>

Sets the subject of message

Default: System subject

=item B<-t, --testmode>

Enabling test mode. This key allows force sending notification while checking

=item B<-u USERNAME, --user=USERNAME, --to=USERNAME>

Recipient username

Default: all users

=item B<-v, --verbose>

Enabling at which displays information about the progress on the screen

=item B<-V, --version>

Print the version number of the program and quit

=back

=head1 COMMANDS

=over 4

=item B<clean>

    monotifier clean

Remove incorrect messages

=item B<create>

    monotifier create -u username -s "Subject" < /path/to/message/file.txt
    monotifier -u username -s "Subject" < /path/to/message/file.txt

Create the message. This command name is optional and use by default!

=item B<remove>

    monotifier remove <ID>

Remove the message by ID

=item B<show>

    monotifier show
    monotifier show <ID>

Show data table or selected record by id

=item B<truncate>

    monotifier truncate

Remove all messages

=back

=head1 DESCRIPTION

This is an extension for the monm notifications over different
communication channels

=head1 AUTHOR

Serz Minus (Sergey Lepenkov) L<http://www.serzik.com> E<lt>abalama@cpan.orgE<gt>

=head1 COPYRIGHT

Copyright (C) 1998-2019 D&D Corporation. All Rights Reserved

=head1 LICENSE

This program is free software; you can redistribute it and/or
modify it under the same terms as Perl itself.

See L<https://dev.perl.org/licenses/>

=cut

use Getopt::Long;
use Pod::Usage;

use App::MonM::Notifier;
use App::MonM::Const;

use constant {
    CMDDEFAULT  => 'create',
};

$| = 1;  # autoflush

my $options = {};
Getopt::Long::Configure("bundling");
GetOptions($options,
    # NoUsed keys map:
    #
    # a A b B   C     e E
    # f F g G     i I j J
    # k K   L m M n N o O
    # p P q Q r R   S   T
    #   U     w W x X y Y
    # z Z

    # Information and debug
    "help|usage|h",         # Show help page
    "longhelp|H|?",         # Show long help page
    "version|vers|ver|V",   # Print VERSION of the App::MonM
    "debug|d",              # Debug mode
    "verbose|v",            # Verbose mode
    "log|l",                # Log mode
    "test|testmode|t",      # Test mode

    # CTK Application
    "config|conf|c=s",      # Config file
    "datadir|dir|D=s",      # DataDir

    # General
    "username|user|to|u=s@",# Username (array)
    "subject|subj|sbj|s=s", # Subject

) || pod2usage(-exitval => 1, -verbose => 0, -output => \*STDERR);
pod2usage(-exitval => 0, -verbose => 1) if $options->{help};
pod2usage(-exitval => 0, -verbose => 2) if $options->{longhelp};
printf("Version: %s\n", App::MonM::Notifier->VERSION) && exit(0) if $options->{version};

# VARS
my $command = shift(@ARGV) || CMDDEFAULT;
my @arguments = @ARGV;

# App::MonM::Notifier instance
my $app = new App::MonM::Notifier(
        project => PROJECTNAME,
        prefix  => PREFIX,
        ($options->{config} && -e $options->{config} ? (configfile => $options->{config}) : ()),
        ($options->{datadir} ? (datadir => $options->{datadir}) : ()),
        options => $options,
        debug   => $options->{debug},
        verbose => $options->{verbose},
        log     => $options->{log},
        test    => $options->{test},
    );
pod2usage(-exitval => 1, -verbose => 99, -sections => 'SYNOPSIS|OPTIONS|COMMANDS', -output => \*STDERR)
    unless $command && grep {$_ eq $command} ($app->list_handlers());

# Run
my $exitval = $app->run($command, @arguments) ? 0 : 1;
printf STDERR "%s\n", $app->error if $exitval && $app->error;

exit $exitval;

1;

__END__
