package BookPub::Import::Importer::OpenRoadMedia::v3;

use strict;
use warnings;

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

sub _fieldMap {
    {
        dateBegin              => 'A',
        rPurchaseType          => 'C',
        rProductType           => 'T',
        rAuthor                => 'P',
        rTitle                 => 'Q',
        rIsbn13                => 'E',
        rImprint               => 'N',
        countryCode            => 'F',
        rUnits                 => 'H',
        rUnitPrice             => 'I',
        rListPrice             => 'I',
        rPurchasePrice         => 'K',
        rRevenue               => 'J',
        currencyCode           => 'J1',
        rDistributor           => 'B',
        rModel                 => 'O',
    };
}

sub _headerIdentifier { rTitle => 'Title' }

sub rServiceName               { 'Open Road Media' }
sub rPriceType                 { 'rrp' }
sub priceType                  { shift->rPriceType }
sub rPurchaseType              { shift->purchaseType }
sub currencyCode               { $_[0]->{_currency} if $_[0]->{_currency} }
sub rListPriceCurrency         { 'USD' }
sub rPurchasePriceCurrency     { 'USD' }
sub _useIsSaleRec              { 1 }

sub _processSheet {
    my ( $self, $sheet, $sheetnum ) = @_;

    return unless $self->{sheetname} =~ /^Sales Detail$/i;

    return $self->BookPub::Import::Importer::_processSheet( $sheet, $sheetnum );
}

sub _processHeader {
    my $self = shift;

    unless ($self->{_currency}) {
        my $currency = $self->_getByFieldName("currencyCode");
        if ($currency =~ /\((\w{3})\)$/ ) {
            $self->{_currency} = $1;
        }
    }
    return $self->SUPER::_processHeader();
}

sub purchaseType {
    my $self = shift;

    my $type = $self->_getByFieldName('rPurchaseType') || '';
    if ( $type =~ /^(?:ebook|subscription|special sales)$/i ) {
        return BookPub::DB::Item::Sale::kPurchaseTypeDownload;
    }

    $self->fail("Unknown purchase type: $type");
}

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('rProductType') || '';
    if ( $type =~ /^(?:Ebook|All Fixed Layout Epubs|Standard Fixed Layout ePub)$/i ) {
        return BookPub::DB::Item::Sale::kProductTypeEBook;
    }

    $self->fail("Unknown product type: $type");
}

sub rUnits {
    my $self = shift;

    my $units = $self->_getByFieldName('rUnits') || 0;
    return $units;
}

sub rRevenue {
    my $self = shift;

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

sub isFree {
    my $self = shift;

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

sub _isSaleRec {
    my $self = shift;

    return unless $self->rIsbn13;

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

1;
