package BookPub::Import::Importer::Spotify::v5;

use strict;
use warnings;

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


sub _fieldMap {
    {
        rTitle             => 'A',
        rIsbn13            => 'C',
        countryCode        => 'F',
        rUnits             => 'I',
        rListPrice         => 'H',
        rListPriceCurrency => 'G',
        rRevenue           => 'N',
        currencyCode       => 'M',
    };
}

sub _unverifiedFieldMap {{}}

sub _headerIdentifier { countryCode => 'Sale Territory' }

sub _useIsSaleRec { 1 }
sub rServiceName  { 'Spotify' }
sub purchaseType  { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType   { BookPub::DB::Item::Sale::kProductTypeAudioBook }
sub rProductType  { shift->productType }
sub priceType     { 'rrp' }
sub rComments     { 'spotify-direct-sales' }

sub dateBegin {
    my $self = shift;

    if ( my ($y, $m) = $self->filename =~ /\b(\d{4})(\d{2})\b/ ) {
        return sprintf "%04d-%02d-%02d", $y, $m, 1;
    }

    $self->fail("Unable to determine date begin from filename");
}

sub rUnits {
    my $self = shift;

    my $units   = $self->_getByFieldName('rUnits')   || 0;
    my $revenue = $self->_getByFieldName('rRevenue') || 0;

    if ( $revenue && !$units) {
        $self->fail("Non-zero revenue reported with zero units");
    }

    if ( !$revenue && !$units) {
        $self->fail("Zero revenue reported with zero units");
    }

    if ( ($units * 1) =~ /[.e]/i ) {
        $self->fail("Fractional units detected");
    }

    return $units;
}

sub isFree {
    my $self = shift;

    return !($self->rRevenue * 1) && ($self->rUnits * 1) ? 'Y' : 'N';
}


1;