# -*- Perl -*-
# Copyright © 2018, Bradley M. Kuhn
#   License: AGPL-3.0-or-later
use strict;
use warnings;

use autodie qw(:all);
our $RT_CMD;
our $VERBOSE;

###############################################################################
sub Outreachy_FindUniqueTicket($@) {
  my($round, @searchTerms) = @_;
  open(my $rtLsFH, "-|", "$RT_CMD", "ls", "-i", 'Queue = outreachy-interns ' .
       "AND Subject LIKE '" . $round . "' AND" .
       join(" AND ", @searchTerms));
  my $ticketSpec;
  while (my $lsLine = <$rtLsFH>) {
    chomp $lsLine;
    if ($lsLine =~ /ticket/) {
      if (defined $ticketSpec) {
        $ticketSpec = undef;
        last;
      }
      $ticketSpec = $lsLine;
    }
  }
  close $rtLsFH;
  return $ticketSpec;
}
###############################################################################
sub Outreachy_FindMainTicketsInRound($) {
  my($round) = @_;
  open(my $rtLsFH, "-|",
       $RT_CMD, "ls", "-i", 'Queue = outreachy-interns ' .
       "AND Subject LIKE '" . $round . "'");
  my @ticketSpecs;
  while (my $lsLine = <$rtLsFH>) {
    chomp $lsLine;
    if ($lsLine =~ /ticket/) {
      push(@ticketSpecs, $lsLine);
    }
  }
  close $rtLsFH;
  return @ticketSpecs;
}
###############################################################################
sub GetLinksForTicket($) {
  my($ticketSpec) = @_;
  my %linked;
  open(my $rtLinksFH, "-|", "$RT_CMD", "show", $ticketSpec . '/links');
  my $type = 'NONE';
  print STDERR "rt-helper: GetLinksForTicket: starting\n" if ($VERBOSE > 9);
  while (my $linksLine = <$rtLinksFH>) {
      print STDERR "rt-helper: GetLinksForTicket: processing line: $linksLine\n" if ($VERBOSE > 9);
    if ($linksLine =~ m%^([^:\s]+)\s*:%) {
      $type = $1;
      print STDERR "rt-helper: GetLinksForTicket: type is now $type\n" if ($VERBOSE > 7);
    }
    if ($type !~ /(NONE|id)/i and $linksLine =~ m%rt.*(ticket/\d+)\s*,?\s*$%) {
      my $val = $1;
      push(@{$linked{$type}}, $val);
      print STDERR "rt-helper: GetLinksForTicket: add link of $val for $type\n" if ($VERBOSE > 7);
    }
  }
  close $rtLinksFH;
  return %linked;
}
###############################################################################
sub PaymentDateByTicket($$) {
  my($ticketSpec, $paymentNumber) = @_;
  open(my $rtPayFH, "-|", "$RT_CMD", "show", "-f", 'CF.{payment-' . $paymentNumber . '-sent}', $ticketSpec);
  my $date;
  while (my $payLine = <$rtPayFH>) {
    chomp $payLine;
    if ($payLine =~ /^\s*CF\s*.\s*{payment-$paymentNumber-sent}\s*:\s*[\d\-]+\s*$/) {
      $date = $payLine;
      last;
    }
  }
  close $rtPayFH;
  return $date;
}
###############################################################################
sub GetStatusFromTicket($) {
  my($ticketSpec) = @_;
  my $status;
  open(my $statusFH, "-|", "$RT_CMD", "show", "-f", 'Status', $ticketSpec);
  while (my $statusLine = <$statusFH>) {
    if ($statusLine =~ /\s*Status\s*:\s*(\S+)\s*$/) {
      $status = $1;
      last;
    }
  }
  close $statusFH;
  return $status;
}
###############################################################################
sub GetCustomFieldForTicket($$) {
  my($ticketSpec, $customField) = @_;
  open(my $rtCustomFH, "-|", "$RT_CMD", "show", "-f", 'CF.{' . $customField .'}', $ticketSpec);
  my $val;
  while (my $customFieldLine = <$rtCustomFH>) {
    chomp $customFieldLine;
    if ($customFieldLine =~ /^\s*CF\s*.\s*{$customField}\s*:\s*(\S+)\s*$/) {
      $val = $1;
      last;
    }
  }
  close $rtCustomFH;
  return $val;
}
###############################################################################
sub FindReimbursementTicketFromList($@) {
  my($round, @ticketList) = @_;
  my $reimbursementTicket;
  foreach my $ticket (@ticketList) {
    $ticket =~ s%\s*ticket/?\s*(\d+)\s*%$1%;
    open(my $rtReimburseFH, "-|", "$RT_CMD", "ls", "-i", 'Queue = accounts-payable AND ' .
         "AND Subject LIKE '" . $round .
         "' AND (Subject LIKE 'reimbursement' OR Subject LIKE 'travel') and id = " . $ticket);
    while (my $reimburseLine = <$rtReimburseFH>) {
      if ($reimburseLine =~ m%\s*ticket\s*/?\s*(\d+)\s*$%) {
        my $tt = $1;
        if ($tt == $ticket) {
          $reimbursementTicket = $ticket;
          last;
        }
      }
    }
    { no autodie qw(:all);
      close $rtReimburseFH;
    }
    last if defined $reimbursementTicket;
  }
  return $reimbursementTicket;
}
###############################################################################
1;
###############################################################################
#
# Local variables:
# compile-command: "perl -c rt-helper.pl"
# perl-indent-level: 2
# End: