#!/usr/bin/perl

use strict;
use CGI;
use JSON;

use Opals::Context;

use SIP::Map;
use SIP::Template;
use SIP::Session;
use SIP::Utility;

my $dbh = Opals::Context->dbh();
END { $dbh->disconnect(); }

my $cgi = CGI->new;

# $cgi->param('aaa') returns an array of aaa
my $input = $cgi->Vars();

#my $op = $input->{'op'};
my $util = SIP::Utility->new();

my $template = SIP::Template->new(filename => 'renew_all.tmpl',);

my $ok              = 'false';
my @renewed_loans   = ();
my @unrenewed_loans = ();

my $transaction_datetime = $util->now();
my @dt = split(/ /, $transaction_datetime);
my $transaction_date =~ $dt[0];

my $session = SIP::Session->new(
  dbh               => $dbh,
  session_id        => $input->{'session_id'},
  patron_identifier => $input->{'patron_identifier'}
);
$session->validate(
  patron_identifier => 1,
  account_expiry    => 1
);

my $screen_message = $session->get('screen_message');
my $user           = $session->get('user');

if ($session->isValid()) {
  my @val = ($user->{'uid'});
  my @loans = @{ $dbh->selectall_arrayref(<<_SQL_, { Slice => {} }, @val) };
select  *
from    opl_loan
where   uid = ?
     && dateReturn is null
_SQL_

  if (scalar(@loans) > 0) {
    my @bc = ();
    foreach my $loan (@loans) {
      push @bc, $loan->{'barcode'};
    }

    my $renewal = $util->post(
      url   => "http://$ENV{'HTTP_HOST'}/bin/ajax/circ/renew",
      param => [
        sip_sid      => $input->{'session_id'},
        uid          => $user->getUID(),
        bcList       => join(',', @bc),
        itemCategory => 'Library'
      ]
    );

    if ($renewal->is_success) {
      my $c = $renewal->content;
      $c =~ s/\\'/'/g;
      my $r = decode_json $c;
      my $rsc; # renewal status code
      my ($bc, $dd);
      foreach my $renewal (@{$r->{'renewal'}}) {
        $rsc = $renewal->{'renewalStatusCode'};
        $rsc =~ s/renewalStatusCode_//;
        $bc = $renewal->{'bibInfo'}->{'barcode'};
        $dd = $renewal->{'dateDue'};
        if ($rsc eq '01') {
          # BM: renewed item SIP field
          push @renewed_loans, { field_bm => "$bc: $dd" };
        }
        else {
          # BN: unrenewed item SIP field
          push @unrenewed_loans, {
            field_bn => "$bc: $dd, ".SIP::Map::RENEWAL_STATUS_CODE->{$rsc}.'.' 
          };
        }
      }
      $ok = 'true';
    }
    else {
      #extra error msg
      $screen_message = 'Error: '.$renewal->status_line.'.';
    }
  }
}

my $response = {
  debug            => $session->get('debug'),
  ok               => $ok,
  renewed_count    => scalar(@renewed_loans),
  unrenewed_count  => scalar(@unrenewed_loans),
  transaction_date => $util->format_datetime($transaction_datetime, 'SIP'),
  institution_id   => $input->{'institution_id'},
  renewed_items    => \@renewed_loans,
  unrenewed_items  => \@unrenewed_loans,
};

$template->param($response);

$template->write(cgi => $cgi);
