package BookPub::Import::Importer::Blloon;

use strict;
use Spreadsheet::ParseExcel::Utility;

use lib '/app/tools/common/lib';
use Common::Util qw(trimleadingzeros);

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

my %priceTypeMap = (
    1  => 'rrp',
    2  => 'rrpplustax',
    41 => 'agency',
    42 => 'agencyplustax',
);

sub _fieldMap {
    {
        my $self = shift;

        my %fieldMap = (
            1 => {
                priceType              => 'AE',
                currencyCode           => 'A5',
                countryCode            => 'T',
                dateBegin              => 'C',
                rFormat                => 'I',
                rIsbn13                => 'E',
                rTitle                 => 'G',
                rAuthor                => 'F',
                rListPrice             => 'L',
                rListPriceCurrency     => 'K',
                rPurchasePrice         => 'N',
                rPurchasePriceCurrency => 'Q',
                rDiscount              => 'AD',
                rRevenue               => 'O',
            },
        );

        return $fieldMap{ $self->_version() };
    }
}

sub _unverifiedFieldMap {
    my $self = shift;

    my %fieldMap = (
        1 => {
            refundedBy => 'AF',
        },
    );

    return $fieldMap{ $self->_version() };
}

sub _headerIdentifier { ( rIsbn13 => 'ISBN' ) }
sub _autoParseTitleAndSubtitle { 1 }
sub _useIsSaleRec              { 1 }
sub _dateFormat                { [ 'excel', 'iso' ] }

sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType  { BookPub::DB::Item::Sale::kProductTypeEBook }
sub units        { return ( shift->rRevenue >= 0 ) ? 1 : -1 }
sub isFree       { return ( shift->rRevenue == 0 ) ? 'Y' : 'N' }

sub currencyCode {
    my $self         = shift;
    my $currencyCode = $self->_getByFieldName('currencyCode');
    if ( $currencyCode =~ /in (\w{3})$/i ) {
        return $1;
    } else {
        $self->fail("Unable to find currency code in '$currencyCode'");
    }
}

sub priceType {
    my $self = shift;
    my $type = $self->_getByFieldName('priceType');
    $type = trimleadingzeros($type);

    $self->fail("Unknown price type '$type'") unless exists $priceTypeMap{$type};

    return $priceTypeMap{$type};
}

sub rRevenue {
    my $self       = shift;
    my $revenue    = $self->_getByFieldName('rRevenue');
    my $refundedBy = $self->_getByFieldName('refundedBy');

    if ( $refundedBy && $revenue > 0 ) {
        $revenue *= -1;
    }

    return $revenue;
}

1;
