package BookPub::Import::Importer::LSI::Version1;

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      => [ 1, 34 ],
    svcProdID => 0,
    title     => 1,
    author    => 2,
    listPrice => 4,
    discount  => 5,
    unitPrice => 6,
    channel   => 7,
    units     => 8,
    unitPrice => 12,
    revenue   => 13,
    isbn10    => 14,
    format    => 21,
    currency  => 33,
    imprint   => 35,
    isbn13    => 41,
);

#public methods

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

    my $lines = $args{lines};
    my $saleCount;

    my $dateStr = $lines->[ $fieldMap{date}[0] ][ $fieldMap{date}[1] ];
    my ( $dateBegin, $dateEnd ) = $self->_getDates( date_begin => $dateStr );
    unless ( $dateBegin and $dateEnd ) {
        $self->errstr('invalid date');
        Common::Log::Print("invalid date string: '$dateStr'");
        return undef;
    }

    for ( my $i = 1 ; $i < scalar @$lines ; $i++ ) {
        my $units = $lines->[$i][ $fieldMap{units} ];
        next unless ($units);

        my $svcProdID = $lines->[$i][ $fieldMap{svcProdID} ];
        my $title     = $lines->[$i][ $fieldMap{title} ];
        my $author    = $lines->[$i][ $fieldMap{author} ];
        my $listPrice = $lines->[$i][ $fieldMap{listPrice} ];
        my $discount  = $lines->[$i][ $fieldMap{discount} ];
        my $unitPrice = $lines->[$i][ $fieldMap{unitPrice} ];
        my $channel   = $lines->[$i][ $fieldMap{channel} ];
        my $isbn10    = $lines->[$i][ $fieldMap{isbn10} ];
        substr( $isbn10, 0, 0 ) = 0 if ( length $isbn10 == 9 );
        my $isbn13   = $lines->[$i][ $fieldMap{isbn13} ];
        my $revenue  = $lines->[$i][ $fieldMap{revenue} ];
        my $imprint  = $lines->[$i][ $fieldMap{imprint} ];
        my $currency = $lines->[$i][ $fieldMap{currency} ] || 'USD';
        my $format   = $lines->[$i][ $fieldMap{format} ];

        $discount /= 100 if ( $discount > 1 );
        my $formatType = $self->_parseFormat($format);

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

        # defaults
        $saleRec->countryCode('US');
        $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->formatType( $formatType || BookPub::DB::Item::Sale::kFormatTypeUnknownEBook );
        $saleRec->units($units);
        $saleRec->unitPrice($unitPrice);
        $saleRec->listPrice($listPrice);
        $saleRec->discount($discount);
        $saleRec->revenue($revenue);
        $saleRec->currencyCode($currency);

        $saleRec->rFormat($format);
        $saleRec->rImprint($imprint);
        $saleRec->rIsbn10($isbn10);
        $saleRec->rIsbn13($isbn13);
        $saleRec->rTitle($title);
        $saleRec->rAuthor($author);
        $saleRec->rListPrice($listPrice);
        $saleRec->rDiscount($discount);
        $saleRec->rUnitPrice($unitPrice);
        $saleRec->rUnits($units);
        $saleRec->rRevenue($revenue);

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

    return $saleCount || 1;    # apparently they may _want_ to upload empty files
}

sub _parseFormat {
    my ( $self, $fmt ) = @_;
    my $format = $self->SUPER::_parseFormat($fmt);

    unless ($format) {

        # in LSI land, 'adobe ebook' is pdf
        $format = BookPub::DB::Item::Sale::kFormatTypePDF if ( $fmt =~ /adobe ebook/i );
    }

    return $format;
}

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