#!/usr/bin/perl -w

use utf8;
use strict;
use warnings;

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

use Dbase::Getopt qw(:DEFAULT getopt_date);
use Dbase::Globals qw(sendmail);
use Dbase::Help qw(DoSelect);
use Dbase::Ticket;
use Loader qw(process_template get_recipients_from_header);
use noris::TroubleTicket;

use constant HR => ( '-' x 79 ) . "\n";

my ( $LastChangeBefore, $ProblemStartsBefore );
GetOptions(
    'last-change-before=s' => sub {
        $LastChangeBefore = &getopt_date;
    },
    'problem-starts-before=s' => sub {
        $ProblemStartsBefore = &getopt_date;
    },
    'mail-template=s' => \my $MailTemplate,
    'send-mails!'     => \( my $SendMails = 0 ),
);

die "Du musst einen Zeitraum mit -last-change-before angeben!\n"
  unless defined $LastChangeBefore;

die "Du musst einen Zeitraum mit -problem-starts-before angeben!\n"
  unless defined $ProblemStartsBefore;

die "Wenn du Mails verschicken möchtest musst du auch ein -mail-template angeben!\n"
  if $SendMails && !defined $MailTemplate;

# Trouble Tickets rausholen
DoSelect(
    sub {
        my ($id) = @_;

        my $tt = noris::TroubleTicket->load($id);
        my $ticket = Dbase::Ticket->new( ticket_number => $tt->get('ticket') );

        # Template Daten generieren
        my %data = ( trouble_ticket => $tt, ticket => $ticket );

        # Ins Template rein
        process_template( \%data, $MailTemplate, \my $mail );
        my @empfaenger;
        {
            my %known;
            @empfaenger = grep !$known{ +lc }++,
              get_recipients_from_header($mail);
        }

        if ( $SendMails && @empfaenger ) {
            sendmail( $mail, $ticket->ticket_email, @empfaenger );
        }
        else { print HR, $mail }
    },
    <<SQL);
  SELECT tto.id
    FROM trouble_ticket tto, (
          SELECT MAX(id) id
            FROM trouble_ticket tti
           WHERE rtticket IS NOT NULL
             AND confirmer IS NOT NULL
             AND beginn > UNIX_TIMESTAMP(now())
         ) tti
   WHERE tto.beginn < $ProblemStartsBefore
     AND tto.timestamp < FROM_UNIXTIME($LastChangeBefore)
     AND tto.id = tti.id
     AND tto.text_resolve IS NULL
SQL

__END__

=head1 NAME

remind_pending_tts - Reminder für noch ausstehende Trouble-Tickets

=head1 SYNOPSE

    remind_pending_tts -last-change-before "3 weeks ago" \
            -problem-starts-before "1 week" \
            -mail-template "path/to/template" \
            -send-mails

=head1 BESCHREIBUNG

Dieses Programm sucht die Trouble-Tickets, die noch ausstehen, in einem gegebenen
Zeitraum nicht aktualisiert worden sind und in einem gegeben Zeitraum fällig
sind.
Falls L</-send-mails> gesetzt ist, verschickt es eine E-Mail, die aus dem
L</-mail-template> generiert werden.

Beispiel: Im o.g. Beispiel wird eine Mail an die Tickets verschickt, die in den
letzten drei Wochen nicht aktualisiert worden sind und in einer Woche fällig
sind.

=head1 OPTIONEN

=over 4

=item -last-change-before Datum

Nur die Tickets, die innerhalb des angegebenen Zeitraums nicht aktualisiert
worden sind.

Als Datum kann dabei alles angegeben werden, was L<Time::Parsedate/parsedate>
versteht.

=item -problem-starts-before Datum

Nur Tickets, die innerhalb des angegebenen Zeitraums fällig sind.

Als Datum kann dabei alles angegeben werden, was L<Time::Parsedate/parsedate>
versteht.

=item -mail-template Datei

Die Datei, die als Mail-Template benutzt werden soll. Wird keine angegeben,
erfolgt eine Debugausgabe.

=item -send-mails

Tatsächlich E-mails verschicken.
Wird diese Option gesetzt, muss zwingend ein L</-mail-template|Template>
angegeben werden.

=back

