package BookPub::Import::Importer::Playaway::v1;

use strict;
use warnings;

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

sub _fieldMap {
    {
        dateBegin  => 'A4',
        dateEnd    => 'A4',
        rTitle     => 'A',
        rIsbn13    => 'F',
        rReturns   => 'K',
        rSales     => 'G',
        rRevenue   => 'R',
    }
}

sub _headerIdentifier { rIsbn13 => 'ISBN #' }


sub _useIsSaleRec        { 1 }
sub rServiceName         { 'Playaway' }
sub priceType            { 'rrp' }
sub purchaseType         { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType          { BookPub::DB::Item::Sale::kProductTypeAudioBook }
sub priceTypeQualifierID { BookPub::DB::Item::PriceTypeQualifier::kCorporate }
sub countryCode          { 'US' }
sub rListPriceCurrency   { 'USD' }
sub currencyCode         { 'USD' }

sub dateBegin { ($_[0]->_extractSaleDates())[0] }
sub dateEnd   { ($_[0]->_extractSaleDates())[1] }

sub _extractSaleDates {
    my $self = shift;

    unless ( $self->{__date_begin} && $self->{__date_end} ) {
        # 07/01/2025 - 09/30/2025
        my $date = $self->_getByFieldName('dateBegin') || '';
        if ( $date =~ /^(\d{2})\/(\d{2})\/(\d{4})\s+-\s+(\d{2})\/(\d{2})\/(\d{4})$/ ) {
            $self->{__date_begin} = sprintf "%04d-%02d-%02d", $3, $1, $2;
            $self->{__date_end}   = sprintf "%04d-%02d-%02d", $6, $4, $5;
        }
    }

    return $self->{__date_begin}, $self->{__date_end};
}

sub rSales {
    my $self = shift;

    my $rSales = $self->_getByFieldName('rSales') || 0;
    return abs $rSales;
}

sub rReturns {
    my $self = shift;

    my $rReturns = $self->_getByFieldName('rReturns') || 0;
    return abs $rReturns;
}

sub rUnits {
    my $self = shift;

    return $self->rSales - $self->rReturns;
}

sub rUnitPrice {
    my $self = shift;

    my $rUnitPrice = !$self->rUnits ? 0 : $self->rRevenue / $self->rUnits;
    return $rUnitPrice;
}

sub rListPrice {
    my $self = shift;

    my $rRevenue = $self->_getByFieldName('rRevenue') || 0;
    return !$self->rUnits ? 0 : $rRevenue / $self->rUnits;
}

sub isFree {
    my $self = shift;

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

sub _isSaleRec {
    my $self = shift;

    my $rIsbn13 = $self->_getByFieldName('rIsbn13') || '';
    return 0 if $rIsbn13 =~ /^Grand Total$/i;
    return 0 if !$self->rRevenue && !$self->rUnits;

    return 1;
}

1;