#!/usr/bin/perl 
#

use strict;

UpdateCodes->start();

package UpdateCodes;

use lib '/app/tools/bookpub/lib';
use BookPub::DB::Item::OnixCode;
use Common::DB::Item::OnixCode;

use base 'BookPub::CronScript';

sub _process {
    my $self = shift;

    $self->_updateOnix(Common::DB::Item::OnixCode::kCodeListProductForm);
    $self->_updateOnix(Common::DB::Item::OnixCode::kCodeListProductFormDetail);
    $self->_updateOnix(Common::DB::Item::OnixCode::kCodeListEpubType);
}

sub _updateOnix {
    my $self = shift;
    my $type = shift;

    my $collection = Common::DB::Item::OnixCode->GetAllForCodeList($type);

    while ( my $commonItem = $collection->next() ) {
        my $dirty = undef;

        my $clientItem = BookPub::DB::Item::OnixCode->Lookup( onix_code_id => $commonItem->onix_code_id );

        if ($clientItem) {
            if ( $clientItem->code_list ne $commonItem->code_list ) {
                $clientItem->code_list( $commonItem->onix_code_id );
                $dirty = 1;
            }
            if ( $clientItem->code_value ne $commonItem->code_value ) {
                $clientItem->code_value( $commonItem->code_value );
                $dirty = 1;
            }
            if ( $clientItem->description ne $commonItem->description ) {
                $clientItem->description( $commonItem->description );
                $dirty = 1;
            }

            if ($dirty) {
                $clientItem->save();
                $self->debug( "Updating code: " . $commonItem->code_value() );
            }

        } else {
            $clientItem = BookPub::DB::Item::OnixCode->Create();
            $clientItem->onix_code_id( $commonItem->onix_code_id() );
            $clientItem->code_list( $commonItem->code_list() );
            $clientItem->code_value( $commonItem->code_value() );
            $clientItem->description( $commonItem->description() );

            $clientItem->save();
            $self->debug( "- Insert code: " . $clientItem->code_value() );
        }
    }
}

1;
