#!/usr/bin/perl

BEGIN {
    unshift @INC, ( $ENV{'POPHOME'} || '@POPHOME@' ) . '/lib'
      unless $ENV{'KUNDE_NO_PERLPATH'};
}

use utf8;
use warnings;
use strict;
use Cf qw($MAILDOM);
use Dbase::Getopt qw(:DEFAULT);
use Dbase::Globals qw(aufzaehlung kpersinfo sendmail);
use Loader qw(current_user);
use noris::Ticket::API qw(get_pooled_connection);

my @Args = GetOptions(
    'status=s' => \my @Status,
    'user=s'   => \my @Users,
    'verbose!' => \( my $Verbose = -t STDOUT ),
);

@Status = 'open' unless @Status;
@Users = kpersinfo(current_user()) unless @Users;

my @open_tickets;
get_pooled_connection()->select_tickets(
    attributes => [ @Users > 1 ? 'owner' : (), 'ticket_number' ],
    query => {
        owner  => [ in => @Users ],
        status => [ in => @Status ],
        locked => 'lock',
    },
)->foreach_row( sub { push @open_tickets, \@_ } );

@open_tickets = map "#$_->[-1]" . ( @$_ == 2 && "/$_->[0]" ),

  # falls mehrere User, primär nach Bearbeiter sortieren,
  # ansonsten in jedem Fall numerisch nach der Ticket-Nummer:
  sort {
    if ( @Users > 1 && ( my $cmp = $a->[0] cmp $b->[0] ) ) { $cmp }
    else { $a->[-1] <=> $b->[-1] }
  } @open_tickets;

my $users = aufzaehlung( { bindewort => 'oder' }, @Users );
if (@open_tickets) {
    my $from = ( $ENV{USER} || 'nobody' ) . "\@$MAILDOM";
    sendmail( <<_. join( "\n", @open_tickets ) . "\n", $from, @Args ) if @Args;
From: $from
To: ${\ join ', ', @Args }
Subject: offene Tickets von $users

_
    print @Args > 0
      && 'Mail an ' . aufzaehlung(@Args) . ' erzeugt wegen ',
      aufzaehlung(@open_tickets) . "\n"
      if $Verbose;
}
elsif ($Verbose) {
    print "Habe keine offenen Tickets von $users gefunden.\n";
}

__END__

=head1 NAME

look4rt-tickets - sucht nach Tickets und erzeugt Erinnerungs-E-Mails

=head1 SYNOPSE

    look4rt-tickets

    look4rt-tickets -user fany -user guenthi ingo

=head1 BESCHREIBUNG

Sucht nach Tickets bestimmter Bearbeiter mit bestimmtem Status und erzeugt,
falls es entsprechende findet, optional eine Erinnerungs-E-Mail an die auf
der Kommandozeile angegebenen Empfänger (im obigen Beispiel also C<ingo>).
(Werden dort keine angegeben, so wird keine E-Mail erzeugt.)

=head1 OPTIONEN

=over 4

=item -user Benutzer

um nach Tickets dieses Users Ausschau zu halten.
Kann mehrfach verwendet werden, um nach den Tickets mehrerer User zu suchen.
Per Default wird nach Tickets der Person gesucht, die das Programm aufgerufen
hat.

=item -status open

=item -status stalled

=item -status resolved

=item -status dead

um nach Tickets mit bestimmten Status Ausschau zu halten.
Um mehrere Status anzugeben, kann die Option mehrfach verwendet werden.
Per Default wird nach offenen (C<open>) Tickets gesucht.

=item -verbose

Es soll eine (einzeilige) Statusmeldung auf der Standardausgabe ausgegeben
werden.
Dies ist Default, falls diese auf ein Terminal zeigt.

=item -noverbose

Es soll keine Statusmeldung auf der Standardausgabe ausgegeben werden.
Dies ist Default, falls diese nicht auf ein Terminal zeigt.

=item -help

=item -?

um (nur) diese Dokumentation anzeigen zu lassen

=back

