package BookPub::Import::Importer::Follett::Version2;

use strict;

use lib '/app/tools/common/lib';
use Common::Log;

use lib '/app/tools/bookpub/lib';
use BookPub::DB::Item::Sale;
use BookPub::Import::SaleRec;
use base 'BookPub::Import::Importer';

my %fieldMap = (
    date      => [ 0, 0 ],
    imprint   => 0,
    isbn13    => 1,
    title     => 2,
    listPrice => 3,
    discount  => 4,
    unitPrice => 5,
    units     => 6,
    revenue   => 7,
);

#public methods

sub _importLines {
    my $self = shift;
    my %args = @_;

    my $lines  = $args{lines};
    my %errMsg = ();
    my $saleCount;

    my $dateStr = $lines->[ $fieldMap{date}[0] ][ $fieldMap{date}[1] ];
    $dateStr =~ /\s(\w+\s\d{4})\s/;
    my ( $dateBegin, $dateEnd ) = $self->_getDates( date_begin => $1 );
    unless ( $dateBegin and $dateEnd ) {
        $self->errstr('invalid date');
        Common::Log::Print("cannot find date in '$dateStr'");
        return undef;
    }

    my $imprint   = '';
    my $lineStart = $fieldMap{date}[0] + 2;
    for ( my $i = $lineStart ; $i < scalar @$lines ; $i++ ) {
        my $isbn13 = $lines->[$i][ $fieldMap{isbn13} ];
        my $title  = $lines->[$i][ $fieldMap{title} ];

        if ( $lines->[$i][ $fieldMap{imprint} ] and !$title and !$isbn13 ) {
            $imprint = $lines->[$i][ $fieldMap{imprint} ];
            $imprint =~ s/\s+\(.+?\)\s*$//;    # strip the acronym
            next;
        }

        unless ( $title or ( $isbn13 and $isbn13 =~ m/^\d+$/ ) ) {

            #Common::Log::Print("skip line $i - title: '$title', isbn: '$isbn13'");
            next;
        }

        my $listPrice = $lines->[$i][ $fieldMap{listPrice} ];
        my $discount  = $lines->[$i][ $fieldMap{discount} ];
        my $unitPrice = $lines->[$i][ $fieldMap{unitPrice} ];
        my $units     = $lines->[$i][ $fieldMap{units} ];
        my $revenue   = $lines->[$i][ $fieldMap{revenue} ];

        $discount =~ s/%//;
        $discount /= 100;

        my $saleRec = BookPub::Import::SaleRec->new();

        # defaults
        $saleRec->currencyCode('USD');
        $saleRec->countryCode('US');
        $saleRec->formatType(BookPub::DB::Item::Sale::kFormatTypeUnknownEBook);
        $saleRec->productType(BookPub::DB::Item::Sale::kProductTypeEBook);
        $saleRec->purchaseType(BookPub::DB::Item::Sale::kPurchaseTypeDownload);
        $saleRec->lineNum( $i + 1 );

        $saleRec->dateBegin($dateBegin);
        $saleRec->dateEnd($dateEnd);
        $saleRec->units($units);
        $saleRec->listPrice($listPrice);
        $saleRec->discount( BookPub::Import::Importer::CalculateDiscount( $unitPrice, $listPrice ) );
        $saleRec->unitPrice($unitPrice);
        $saleRec->revenue($revenue);

        $saleRec->rImprint($imprint);
        $saleRec->rIsbn13($isbn13);
        $saleRec->rTitle($title);
        $saleRec->rUnits($units);
        $saleRec->rListPrice($listPrice);
        $saleRec->rDiscount($discount);
        $saleRec->rUnitPrice($unitPrice);
        $saleRec->rRevenue($revenue);

        #$args{dumper}($saleRec);
        $self->_insertSale( sale => $saleRec );
        $saleCount++;
    }

    return $saleCount;
}

###
1;    # Play nicely.
###
