package BookPub::Import::Importer::AIDC::Version2;

use strict;
use Data::Dumper;

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

use lib '/app/tools/bookpub/lib';
use BookPub::Tracker::Service;

use base 'BookPub::Import::Importer::AIDC::Base';

sub _fieldMap {
    {
        serviceID            => 'AQ',
        isFree               => 'AF',
        countryCode          => 'K',
        rState               => 'I',
        rPostalCode          => 'J',
        dateBegin            => 'AR',
        rIsbn13              => 'O',
        rTitle               => 'Y',
        rAuthor              => 'Z',
        rUnits               => 'T',
        rRevenue             => 'U',
        rListPrice           => 'V',
        rDiscount            => 'X',
        rUnitPrice           => 'W',
        rChannel             => 'AH',
        rProductType         => 'AJ',
        rTransactionCategory => 'AF',
        serviceProductID     => 'AQ',
        rReturns             => 'R',
        rSales               => 'P'
    };
}

sub _unverifiedFieldMap {
    {
        _description => 'AP',
    }
}

sub _isSaleRec{ 1 };

sub _headerIdentifier { ( countryCode => 'COUNTRY' ) }

sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub priceType    { 'rrp' }
sub currencyCode { 'USD' }
sub rServiceName { 'AIDC' }

sub productType  { return shift->rProductType() }

# We have custom sales/returns processing.
# Description in RSD-7360
sub rReturns {
    my $self = shift;

    my $return = $self->_getByFieldName('rReturns') || 0;
    my $sale = $self->_getByFieldName('rSales') || 0;

    return 0 if $return > 0;

    my $returns = ($return < 0 ? abs($return) : 0);
    $returns = abs($sale) if $sale < 0;

    return $returns;
}

sub rSales {
    my $self = shift;

    my $sale = $self->_getByFieldName('rSales') || 0;
    my $return = $self->_getByFieldName('rReturns') || 0;

    return 0 if $sale < 0;

    my $sales = ($sale > 0 ? $sale : 0);
    $sales = $return if $return > 0;

    return $sales;
}

sub rProductType {
    my $self = shift;

    my $type = $self->_getByFieldName('rProductType');
    if ( $type =~ /^DVD-ROM$/i ||
        $type =~ /^(?:ENHANCED )?EPUB$/i ||
        $type =~ /^ONLINE RESOURCE$/i ||
        $type =~ /^PDF EBOOK$/i ||
        $type =~ /^OTHER DIGITAL$/i ||
        $type =~ /^SHORT\-FORM CONTENT$/i ) {
        return BookPub::DB::Item::Sale::kProductTypeEBook;
    }
    elsif ( $type =~ /^DOWNLOADABLE AUDIO FILE$/i) {
        return BookPub::DB::Item::Sale::kProductTypeAudioBook;
    }

    $self->fail("Unknown product type: $type");
}

sub isFree {
    my $self   = shift;
    my $isFree = $self->_getByFieldName('isFree');

    return lc($isFree) eq 'complimentary' ? 'Y' : 'N';
}

sub rIsbn13 {
    my $self = shift;
    my $isbn = $self->_getByFieldName('rIsbn13');

    $isbn =~ s/'//;

    return $isbn;
}

sub rPostalCode {
    my $self = shift;
    my $code = $self->_getByFieldName('rPostalCode');
    $code =~ s/\`//;

    return $code;
}

sub rState {
    my $self = shift;

    my $state = $self->_getByFieldName('rState');

    return "NS" if $state =~ /^NOVASCOTIA$/i;
    return $self->SUPER::rState();
}

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

