package BookPub::Import::Importer::ebrary::Version15;

use strict;

use lib '/app/tools/bookpub/lib';
use base 'BookPub::Import::Importer';

sub _headerIdentifier { ( rTitle => 'Title' ) }

# map version num to the field order
sub _fieldMap {
    my $self = shift;

    my $sheet = lc( $self->sheetname ) || return {};

    my %fieldMap = (
        15 => {
            rAuthor          => 'F',
            rTitle           => 'H',
            rIsbn13          => 'B',
            serviceProductID => 'A',
            rRevenue         => 'O',
        },
    );

    return $fieldMap{ $self->_version() };
}

sub _useIsSaleRec              { 1 }
sub _autoParseTitleAndSubtitle { 1 }
sub purchaseType               { BookPub::DB::Item::Sale::kPurchaseTypeSubscriptionDL }
sub productType                { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rProductType               { BookPub::DB::Item::Sale::kProductTypeEBook }
sub priceType                  { 'rrp' }
sub countryCode                { 'US' }
sub currencyCode               { 'USD' }
sub units                      { shift->rRevenue >= 0 ? 1 : -1 }
sub rUnits                     { shift->rRevenue >= 0 ? 1 : -1 }
sub _dateNormalization         { 'quarter' }

sub rServiceName {
    return BookPub::Tracker::Service::GetDefaultServiceName(
        service_id => shift->serviceID
    );
}

sub rListPrice {
    my $self    = shift;
    my $revenue = $self->_getByFieldName('rRevenue');

    return abs($revenue);
}

sub _isSaleRec {
    my $self    = shift;
    my $revenue = $self->_getByFieldName('rRevenue') || 0;

    # We're going to skip lines with no revenue
    return 0 unless $revenue + 0;

    my $id     = $self->_getByFieldName('serviceProductID');
    my $author = $self->_getByFieldName('rAuthor');
    my $isbn   = $self->_getByFieldName('rIsbn13');
    my $rTitle = $self->_getByFieldName('rTitle');

    # We're going to skip the total line
    if ( !$isbn && !$author && ( $id =~ /total?/i || $rTitle =~ /totals?/i ) ) {
        return 0;
    }

    return $self->SUPER::_isSaleRec();
}

sub _getDateBegin {
    my $self     = shift;
    my $filename = $self->filename;

    $filename =~ /(Q[1-4]\-20\d{2})/;
    return $1;
}

sub _getDateEnd { return shift->_getDateBegin(); }

1;
