#!/usr/bin/perl

# NOTE:
# This script is used for three messages pairs:
#  - Block Patron (01)/Patron Status Response (24),
#  - Patron Status Request (23)/Patron Status Response (24), and
#  - Patron Enable (25)/Patron Enable Response (26).

use strict;
use CGI;

use Opals::Constant;
use Opals::Context;

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 => 'patron_status.tmpl',);

#my $patron_status = '';
my $language =
  SIP::Map::LANGUAGE->{ $input->{'language'} } || SIP::Map::LANGUAGE->{'000'};
my $transaction_datetime = $util->now();

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

my $currency_type         = substr($util->getPreference($dbh, 'currency'), 0, 3);
my $fee_amount            = 0.00;

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

if ($session->isValid()) {
  $fee_amount = $user->getBalance();

  # enable/block user
  my $url = $cgi->url(-relative => 1);
  if ($url eq 'block_patron' || $url eq 'patron_enable') {
    my $status = USER_ACTIVE;
    my $msg    = '';

    if ($url eq 'block_patron') {
      $status = USER_BLOCK;
      $msg    = $input->{'blocked_card_msg'};

      # optional (Block Patron)
      #if (lc($input->{'card_retained'}) eq 'y') {
      #}
    }

    $user->updatePatronStatus(
      status   => $status,
      datetime => $transaction_datetime,
      message  => $msg,
    );
  }

  # optional (Patron Status Response):
  #  - currency type
  #  - fee amount (owed by patron)
}

my $response = {
  debug             => $session->get('debug'),
  patron_status     => $user->getPatronStatus(),
  fee_amount        => $fee_amount,
  language          => $language,
  transaction_date  => $util->format_datetime($transaction_datetime, 'SIP'),
  institution_id    => $input->{'institution_id'},
  patron_identifier => $user->getPatronIdentifier(),
  personal_name     => $user->getPersonalName(),
  currency_type     => $currency_type,
  valid_patron      => $user->isValidPatron(),
  valid_patron_password =>
    $user->isValidPatronPassword($input->{'patron_password'}),
  screen_message => $screen_message,
};

$template->param($response);

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