#!/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.tmpl',);

my ($ok, $renewal_ok, $desensitize) = ('false', 'false', 'false');
my $due_date;

my $transaction_datetime = $util->now();
my @dt = split(/ /, $transaction_datetime);
my $transaction_date =~ $dt[0];
my $barcode = $input->{'item_identifier'};

my $session = SIP::Session->new(
  dbh               => $dbh,
  session_id        => $input->{'session_id'},
  patron_identifier => $input->{'patron_identifier'},
  item_identifier   => $barcode
);
$session->validate(
  patron_identifier => 1,
  account_expiry    => 1,
  item_identifier   => 1
);
my $currency_type = substr($util->getPreference($dbh, 'currency'), 0, 3);

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

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

  if ($renewal->is_success) {
    my $c = $renewal->content;
    $c =~ s/\\'/'/g;
    my $r = decode_json $c;
    my $rsc = $r->{'renewal'}->[0]->{'renewalStatusCode'};
    $rsc =~ s/renewalStatusCode_//;
    if ($rsc eq '01') {
      $ok = 'true';
      $desensitize = 'true';
      $due_date = $r->{'renewal'}->[0]->{'dateDue'};

      $renewal_ok = 'true';
    }
    else {
      $screen_message = SIP::Map::RENEWAL_STATUS_CODE->{$rsc}.'.';
    }
  }
  else {
    #extra error msg
    $screen_message = 'Error: '.$renewal->status_line.'.';
  }

  if ($ok eq 'false') {
    $screen_message .= ' Please see library staff for assistance.';
  }
}

my $response = {
  debug             => $session->get('debug'),
  ok                => $ok,
  renewal_ok        => $renewal_ok,
  magnetic_media    => SIP::Map::MAP->{ $record->{'type'} }->{'magnetic_media'},
  desensitize       => $desensitize,
  transaction_date  => $util->format_datetime($transaction_datetime, 'SIP'),
  institution_id    => $input->{'institution_id'},
  patron_identifier => $input->{'patron_identifier'},
  item_identifier   => $input->{'item_identifier'},
  title_identifier  => $record->{'title'},
  due_date          => $util->format_datetime($due_date, 'SIP'),
  currency_type     => $currency_type,
  security_inhibit =>
    SIP::Map::MAP->{ $record->{'type'} }->{'security_inhibit'},
  media_type     => SIP::Map::MAP->{ $record->{'type'} }->{'media_type'},
  screen_message => $screen_message,
};

$template->param($response);

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