package BookPub::Import::Importer::WFHowes::v6;

use strict;
use warnings;

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

sub _fieldMap {
    {
        dateBegin        => 'D',
        dateEnd          => 'D',
        rProductType     => 'H',
        rAuthor          => 'H',
        rTitle           => 'H',
        serviceProductID => 'F',
        rUnits           => 'I',
        rListPrice       => 'K',
        rPurchasePrice   => 'J',
        rRevenue         => 'L',
    };
}

sub _headerIdentifier      { rAuthor => 'Description' }
sub _useIsSaleRec          { 1 }
sub purchaseType           { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub priceType              { 'rrp' }
sub countryCode            { 'GB' }
sub currencyCode           { 'GBP' }
sub rPurchasePriceCurrency { shift->currencyCode }
sub rListPriceCurrency     { shift->currencyCode }
sub productType            { shift->rProductType }

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

sub rProductType {
    my $self = shift;

    my $hDescription = $self->_parseDescription();
    return BookPub::DB::Item::Sale::kProductTypeAudioBook if $hDescription->{rProductType} =~ /^OBO$/i;

    $self->fail("Unable to determine rProductType for '$hDescription->{rProductType}'.");
}

sub rAuthor {
    my $self = shift;

    my $hDescription = $self->_parseDescription();
    return $hDescription->{rAuthor};
}

sub rTitle {
    my $self = shift;

    my $hDescription = $self->_parseDescription();
    return $hDescription->{rTitle};
}

sub rTaxAmount {
    my $self = shift;

    my $rPurchasePrice = $self->_getByFieldName('rPurchasePrice') || 0;
    my $rListPrice     = $self->_getByFieldName('rListPrice')     || 0;

    return $rPurchasePrice - $rListPrice;
}

sub _parseDescription {
    my $self = shift;

    return $self->{_description} if $self->{_description};

    my $description = $self->_getByFieldName('rProductType') // '';
    my %description;
    @description{qw/rProductType rAuthor rTitle/} = $description =~ /^(.+)\/(.+)\/(.+)$/;

    return $self->{_description} = \%description;
}

sub _isSaleRec {
    my $self = shift;

    # set default for the 'Description' field
    $self->{_description} = undef;

    # skip a line if rProductType = 'TCM'
    my $hDescription = $self->_parseDescription();
    return if defined $hDescription->{rProductType} && $hDescription->{rProductType} =~ /^TCM$/i;

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


1;