package BookPub::Import::Importer::EBook::Version20;

use strict;
use warnings;

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

sub _headerIdentifier {
    my $self = shift;

    my %map = (
        gbp_usd         => [ rTitle => 'Title' ],
        earnings_detail => [ rTitle => 'TITLE' ],
    );

    my $sheetKey = $self->_defineSheetKey();
    return $sheetKey ? @{ $map{$sheetKey} } : undef;
}

sub _fieldMap {
    my $self = shift;

    my %map = (
        gbp_usd => {
                purchaseType         => 'I',
                rTitle               => 'D',
                rIsbn13              => 'G',
                rImprint             => 'C',
                countryCode          => 'V',
                serviceProductID     => 'E',
                rUnits               => 'N',
                rListPrice           => 'P',
                rListPriceCurrency   => 'O',
                rDiscount            => 'X',
                rRevenue             => 'Y',
                currencyCode         => 'O',
                rChannel             => 'H',
                rPromoCode           => 'R',
                rModel               => 'J',
                rTransactionCategory => 'I',
        },
        earnings_detail => {
                dateBegin          => 'C',
                dateEnd            => 'C',
                rTitle             => 'A',
                rIsbn13            => 'B',
                rUnits             => 'J',
                rListPrice         => 'F',
                rListPriceCurrency => 'E',
                rCOGS              => 'I',
                rRevenue           => 'J',
                currencyCode       => 'J',
        },
    );

    my $sheetKey = $self->_defineSheetKey();
    return $sheetKey ? $map{$sheetKey} : {};
}

sub _defineSheetKey {
    my $self = shift;

    my $sheetName = $self->sheetname() || '';
    if ( $sheetName =~ /^\s*Earnings\s*detail\s*$/i ) {
        return 'earnings_detail';
    } elsif ( $sheetName =~ /^\s*\w{3}\s*$/i ) {
        return 'gbp_usd';
    }

    return 0;
}

sub rUnits       { shift->units() }
sub rProductType { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rState       { shift->_defineSheetKey eq 'earnings_detail' ? 'Vienna' : undef }
sub rFormat      { shift->_defineSheetKey eq 'gbp_usd' ? 'EBL' : undef }

sub _getDateBegin {
    my $self = shift;

    if ( $self->_defineSheetKey ne 'earnings_detail' ) {
        return $self->SUPER::_getDateBegin();
    }

    return $self->{_dateBegin} = $self->_getByFieldName('dateBegin');
}

sub _getDateEnd {
    my $self = shift;

    if ( $self->_defineSheetKey ne 'earnings_detail' ) {
        return $self->SUPER::_getDateEnd();
    }

    return $self->{_dateEnd} = $self->_getByFieldName('dateEnd');
}

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

    if ( $self->_defineSheetKey eq 'earnings_detail' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    } elsif ( lc($purchaseType) eq 'ato loan' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeLoan;
    } elsif ( lc($purchaseType) eq 'ato purchase' ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    }

    return $self->SUPER::purchaseType();
}

sub countryCode {
    my $self = shift;

    if ( $self->_defineSheetKey eq 'earnings_detail' ) {
        return 'Austria';
    }

    return $self->SUPER::countryCode;
}

sub currencyCode {
    my $self = shift;

    if ( $self->_defineSheetKey eq 'earnings_detail' ) {
        return 'USD';
    }

    return $self->SUPER::currencyCode;
}

sub units {
    my $self = shift;

    if ( $self->_defineSheetKey eq 'earnings_detail' ) {
        my $revenue = $self->_getByFieldName('rRevenue');
        return $revenue <=> 0;
    }

    return $self->SUPER::units();
}

sub _processSheet {
    my $self = shift;

    unless ( $self->_defineSheetKey ) {
        Common::Log::Print(" -- Skipping Sheet #$self->{sheetnum}: '". $self->sheetname . "'\n");
        $self->_clearSheetCache;
        return;
    }

    return $self->SUPER::_processSheet(@_);
}


1;
