package BookPub::Import::Importer::BarnesNoble::Version3;

use strict;

use Common::Assert;
use Data::Dumper;

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

# this is based on the B&N ad-hoc format, which we went
# ahead and supported for Faber & Faber. we proably want
# to deprecate it at some point. probably shortly after
# they terminate their agreement.

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

sub _fieldMap {
    {
        rIsbn13    => 'A',
        rImprint   => 'C',
        rTitle     => 'D',
        rSubtitle  => 'D',
        rAuthor    => 'E',
        dateBegin  => 'G',
        rSales     => 'I',
        rReturns   => 'J',
        rUnitPrice => 'K',
        rRevenue   => 'L',
        rListPrice => 'M',
        rFormat    => 'P',
    };
}

sub _unverifiedFieldMap {
    { eGiftDateBegin => 'H', };
}

sub countryCode { 'US' }

sub currencyCode { 'USD' }

sub formatType { undef }

sub priceType { 'rrp' }

sub productType { BookPub::DB::Item::Sale::kProductTypeEBook }

sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }

sub rListPriceCurrency { 'USD' }

sub _getDateBegin {
    my $self = shift;

    # We'll use the eGift Date if that column is populated.
    my $date = $self->_getByFieldName('eGiftDateBegin');

    if ( !$date ) {
        $date = $self->_getByFieldName('dateBegin');
    }

    return $date;
}

sub rRevenue {
    my $revenue = shift->SUPER::rRevenue();

    $revenue =~ s/,//g;

    return $revenue;
}

sub units {
    my $self = shift;

    my $sales   = $self->rSales   || 0;
    my $returns = $self->rReturns || 0;

    # raw returns are provided as negative numbers
    return $sales + $returns;
}

sub rTitle {
    my $self = shift;

    my $title = $self->SUPER::rTitle();

    if ( $title =~ /(.+):.+/ ) {
        $title = $1;
    }

    return $title;
}

sub rSubtitle {
    my $self = shift;

    my $title = $self->SUPER::rSubtitle();
    my $subtitle;

    if ( $title =~ /.+: (.+)/ ) {
        $subtitle = $1;
    }

    return $subtitle;
}

1;
