package BookPub::Import::Importer::Spotify::v4;

use strict;
use warnings;

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


sub _fieldMap {
    {
        dateBegin          => 'A',
        dateEnd            => 'B',
        rTitle             => 'F',
        rSubtitle          => 'G',
        rIsbn13            => 'H',
        countryCode        => 'C',
        serviceProductID   => 'E',
        rUnits             => 'N',
        rListPrice         => 'L',
        rListPriceCurrency => 'K',
        rDiscount          => 'M',
        rRevenue           => 'Q',
        currencyCode       => 'P',
        rDuration          => 'J',
        rChannel           => 'D',
    };
}

sub _unverifiedFieldMap {{}}

sub _headerIdentifier { countryCode => 'Market' }

sub _useIsSaleRec { 1 }
sub purchaseType  { BookPub::DB::Item::Sale::kPurchaseTypeStream }
sub rPurchaseType { shift->purchaseType }
sub productType   { BookPub::DB::Item::Sale::kProductTypeAudioBook }
sub rProductType  { shift->productType }
sub priceType     { 'rrp' }
sub rServiceName  { 'Spotify' }

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

    $self->fail("Units & Revenue are empty") unless ($units || $revenue);
    $self->fail("Units is empty but revenue defined") if (!$units && $revenue);
    $self->fail("Wrong units format: $units") unless $units =~ /^\d+$/;

    return $units;
}

sub rUnitPrice {
    my $self = shift;

    return $self->rRevenue / $self->rUnits;
}

sub rRevenue {
    my $self = shift;

    my $revenue = $self->_getByFieldName('rRevenue') || 0;
    return $revenue * 1;
}

sub isFree {
    my $self = shift;

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

1;
