package BookPub::Import::Importer::EBook::Version15;

use strict;

use Data::Dumper;

use lib '/app/tools/common/lib';
use Common::Consts qw(%CURRENCY_TO_COUNTRY);

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

sub _headerIdentifier { ( rTitle => 'Title' ) }

sub formatType  { BookPub::DB::Item::Sale::kFormatTypeEBL }
sub productType { BookPub::DB::Item::Sale::kProductTypeEBook }
sub priceType   { 'rrp' }

sub _fieldMap {
    {
        purchaseType       => 'I',
        rRevenue           => 'Q',
        rDiscount          => 'P',
        rListPriceCurrency => 'M',
        rListPrice         => 'N',
        rUnits             => 'L',
        rImprint           => 'C',
        rTitle             => 'D',
        currencyCode       => 'M',
    };
}

sub _unverifiedFieldMap {
    { eIsbn13 => 'G', };
}

sub countryCode {
    my $self = shift;

    $self->{countryCode} = $CURRENCY_TO_COUNTRY{ $self->sheetname };

    return $self->{countryCode};
}

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

    if ( lc($purchaseType) eq 'stl' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeLoan;
    } elsif ( lc($purchaseType) eq 'non-linear lending' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    } elsif ( lc($purchaseType) eq 'unlimited' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    } elsif ( lc($purchaseType) eq 'chapter' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    } elsif ($purchaseType) {
        $self->fail("Unknown purchase type '$purchaseType'");
    }
}

sub _dateFormat { [ 'numerical', 'quarter', 'iso' ] }

sub _getDateBegin {
    my $self = shift;
    return $self->{_dateBegin} if ( $self->{_dateBegin} );

    my $filename = $self->filename;

    if ( $filename && $filename =~ /(\d{4}-\d{2}-\d{2})-(\d{4}-\d{2}-\d{2})/ ) {
        $self->{_dateBegin} = $1;
    }

    return $self->{_dateBegin};
}

sub _getDateEnd {
    my $self = shift;
    return $self->{_dateEnd} if ( $self->{_dateEnd} );

    my $filename = $self->filename;

    if ( $filename && $filename =~ /(\d{4}-\d{2}-\d{2})-(\d{4}-\d{2}-\d{2})/ ) {
        $self->{_dateEnd} = $2;
    }

    return $self->{_dateEnd};
}

sub rIsbn13 {
    my $self = shift;

    return $self->_getByFieldName('eIsbn13');
}

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

    return $price eq 0 ? 'Y' : 'N';
}

sub units {
    my $self    = shift;
    my $revenue = $self->_getByFieldName('rRevenue');
    my $units   = $self->_getByFieldName('rUnits');
    if ( $revenue < 0 && $units > 0 ) {
        $units *= -1;
    }
    return $units;
}

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

    return $self->rTitle && ( $eIsbn13 || $self->rRevenue ) && $self->dateBegin;
}

1;
