#!/usr/bin/perl 
use lib("/www/opals/module");
use Opals::Context('/etc/opals/conf/bass_sghb');
use strict;
use Opals::Constant; 
use POSIX qw(
    ceil
    strftime
);

use Opals::Marc::Record;
use MARC::Record;
use MARC::Field;
use MARC::File::XML;
use Encode;
use DBI;
my $dbh = Opals::Context->dbh();
END {
    if ($dbh) {
        $dbh->disconnect();
    }
}
$| = 1;
my $zdbDir = Opals::Context->config('zRoot') .'/'
           . Opals::Context->config('zPort') .'/'
           . 'record' .'/'
           . Opals::Context->config('zDatabase');

my $sth=$dbh->prepare("select i.rid,l.code,l.lexile from opl_recordIdentifier i inner join lexile l on i.data=l.isbn13 where i.tag='020' && i.code='a'");

$sth->execute();
while(my ($rid,$code,$lexile) =$sth->fetchrow_array){
    printf "%s -- %s --%s\n" ,$rid,$code,$lexile;
    addLexile($dbh,$rid,$code,$lexile);

}

sub addLexile{
    my($dbh,$rid,$code,$lexile)=@_;
    
    my $lVal="$code $lexile";
    $lVal=~ s/^ +| +$//g;
    my $lexileField = MARC::Field->new( 521, '8', '0', 'a' => $lVal,'b' => 'Lexile');

    my $xml = '';
    my $dir = ceil($rid/1000);
    if (! -f "$zdbDir/$dir/$rid.xml") {
        print "ERROR: $zdbDir/$dir/$rid.xml: not found.\n";
        return;
    }
    open RECORD, "<$zdbDir/$dir/$rid.xml";
    while (<RECORD>) {
        $xml .= $_; 
    }
    close RECORD;
    print "$rid\n";
    my $marc = Opals::Marc::Record::newFromXml($xml);
    my @fields=$marc->field('521');
    my $updateed=0;
    foreach my $f(@fields){
        if($f->indicator(1) ==8){
            if($f->subfield('b') =~/lexile/i){
                $f->update('a'=>$lVal);
                $updateed=1;
            }
        }
    }
    if(!$updateed){
        $marc->insert_fields_ordered($lexileField);
    }
    my $xml = MARC::File::XML::record($marc);
    open RECORD, ">$zdbDir/$dir/$rid.xml";
    print RECORD $xml;
    close RECORD
}

