package BookPub::Import::Importer::AdamsBookCompany;

use strict;

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

use Date::Calc qw( Add_Delta_YM );

sub _headerIdentifier { ( rIsbn13 => 'ISBN' ) }

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        1 => {
            rState         => 'C',
            rPostalCode    => 'D',
            dateBegin      => 'F',
            rIsbn13        => 'G',
            rUnits         => 'H',
            rListPrice     => 'I',
            rPurchasePrice => 'J',
            rTaxAmount     => 'T',
            rRevenue       => 'K',
        },
        2 => {
            rState      => 'C',
            rPostalCode => 'D',
            dateBegin   => 'F',
            rIsbn13     => 'G',
            rUnits      => 'H',
            rListPrice  => 'I',
            rTaxAmount  => 'T',
            rRevenue    => 'J',
        },
        3 => {
            dateBegin      => 'F',
            rIsbn13        => 'G',
            rState         => 'C',
            rPostalCode    => 'D',
            rUnits         => 'H',
            rListPrice     => 'I',
            rPurchasePrice => 'J',
            rRevenue       => 'K',
            rTaxAmount     => 'S',
        },
        4 => {
            dateBegin      => 'E',
            dateEnd        => 'E',
            rFormat        => 'B5',
            rAuthor        => 'C',
            rTitle         => 'B',
            rIsbn13        => 'A',
            rInstitution   => 'H',
            rState         => 'K',
            rPostalCode    => 'L',
            countryCode    => 'B8',
            rUnits         => 'G',
            rListPrice     => 'F',
            rPurchasePrice => 'J',
            rDiscount      => 'N',
            rRevenue       => 'P',
            rTaxAmount     => 'Q',
        },
    );

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

sub _useIsSaleRec { 1 }

sub countryCode            { 'US' }
sub currencyCode           { 'USD' }
sub rListPriceCurrency     { 'USD' }
sub rPurchasePriceCurrency { 'USD' }
sub purchaseType           { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub priceType              { 'agency' }
sub productType            { BookPub::DB::Item::Sale::kProductTypeEBook }

sub _processLine {
    my $self  = shift;
    my $state = $self->rState();

    if ( defined $state && $state =~ /Gross Exempt Amount/i ) {
        $self->{_endOfData} = 1;
        return undef;
    }

    return $self->SUPER::_processLine(@_);
}

sub _isSaleRec {
    my $self = shift;

    # If we've set the end of data flag in processLine, we are done.
    return if ( $self->{_endOfData} );

    # Ignore the subtotal line.
    return if ( !$self->rState
        && !$self->rPostalCode
        && !$self->dateBegin
        && !$self->rIsbn13
        && !$self->rUnits
        && !$self->rTaxAmount );

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

1;
