#!/usr/bin/perl

#use utf8;
use strict;
use CGI;
use MARC::File::USMARC;
use MARC::File::XML;
use POSIX qw(
    ceil
);

use Opals::Context;
use Opals::Template qw(
    tmpl_read
    tmpl_write
);
#use Opals::Search qw(
#    srch_searchRecord
#);
use Opals::Marc21 qw(
    mc21_parseRecord
);
use Opals::Utility qw(
    util_getXmlRecord
);

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

my $cgi = CGI->new;
my $input = $cgi->Vars();
my ($permission, $cookie, $template) = tmpl_read(
        {
            dbh             => $dbh,
            cgi             => $cgi,
            tmplFile        => 'marc21/view.tmpl',
        }
);

#my $zid = $input->{'zid'};
#($zid && $zid >= 0) || ($zid = 0);
#
my $rid = $input->{'rid'};
my $type = $input->{'type'};
my $iid = $input->{'iid'};
my $order = $input->{'order'};
my $dir = $input->{'dir'};
my $pSize = $input->{'pSize'};
my $total = $input->{'total'};

$rid = validateNumber($rid);
($type =~ m/(import|veto)/) || ($iid = 0);
$iid = validateNumber($iid);
$order = validateNumber($order) + $dir;
$pSize = validateNumber($pSize);
$total = validateNumber($total);

($order > 0) || ($order = 1);
($order <= $total) || ($order = $total);
($pSize > 0) || ($pSize = 1);

if ($rid || $iid) {
    # See Search.pm for more info on use attribute.
#    my $pqf = "\@attr 1=12 $rid";
#    my ($resultSize, $marcxml) = srch_searchRecord($dbh, 0, 'f', $pqf, $ENV{'Z_INDEX_BASE'}, 1);
#    my @rec = mc21_parseRecord($marcxml->[0]);
    my @rec;
    if ($rid) {
        @rec = mc21_parseRecord(util_getXmlRecord($rid));
        $template->param(
            rid => $rid,  #Ha -- add this line for printing
        );
    }
    else { #$iid
        my $imex = Opals::Context->config('imex');
        my $db_name = Opals::Context->config('db_name');

        my $src = "$imex/import/$db_name/$iid";

        if ($type ne 'import') {
            $src .= ".$type";
        }

        if (-r $src) {
            my $marcfile = MARC::File::USMARC->in( "$src" );

            my $o = 1;
            while ($o < $order) {
                $marcfile->skip();
                $o++;
            }

            my $rec = $marcfile->next();
            if ($rec) {
                @rec = mc21_parseRecord(MARC::File::XML::record($rec));

                $template->param(
                    fileType => ($type eq 'import') ? 'Uploaded' : 'Vetoed',
                    type    => $type,
                    iid     => $iid,
                    order   => $order,
                    total   => $total,
                    pSize   => $pSize,
                    pNum    => ceil($order/$pSize),
                    isFirst => ($order == 1),
                    isLast  => ($order == $total),
                );
            }

            $marcfile->close();
        }
    }

    $template->param(
        rec => \@rec,
    );
}
else {
    $template->param(
        error => 1,
    );
}

$template->param(
    #kw0 =>  $input->{'kw0'},
    highlightString =>  $input->{'highlightString'},
);
tmpl_write($dbh, $cgi, $cookie, $template);
################################################################################


sub validateNumber {
    my ($num) = @_;

    if (!$num || $num =~ m/\D/) {
        $num = 0;
    }

    return $num;
}
