package BookPub::Import::Importer::OneWorldContent::v1;

use strict;
use warnings;

use lib '/app/tools/bookpub/lib';

use parent 'BookPub::Import::Importer';

sub _fieldMap {
    {
        rServiceName  => 'D1',
        dateBegin     => 'A',
        rAuthor       => 'F',
        rTitle        => 'E',
        rIsbn13       => 'D',
        rInstitution  => 'C',
        countryCode   => 'M',
        rUnits        => 'G',
        rListPrice    => 'I',
        rDiscount     => 'K',
        rRevenue      => 'L',
        rModel        => 'H'
    };
}

sub _unverifiedFieldMap { }
sub _headerIdentifier { rAuthor => 'Author' }
sub _useIsSaleRec        { 1 }

sub purchaseType         { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub rPurchaseType        { shift->purchaseType() }
sub productType          { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rProductType         { BookPub::DB::Item::Sale::kProductTypeEBook }
sub priceType            { 'rrp' }
sub priceTypeQualifierID { BookPub::DB::Item::PriceTypeQualifier::kSchoolLibrary }
sub currencyCode         { 'USD' }
sub rListPriceCurrency   { 'USD' }

sub rServiceName {
    my $name = shift->_getByFieldName('rServiceName');
    return '1World Content' if $name =~ /1World Sales Report - Macmillan USA/;
}

sub dateBegin {
    my $self = shift;

    my $dateBegin = $self->_getByFieldName('dateBegin');
    if ( $dateBegin =~ /^(\d{4})-(\d{2})-(\d{2}).*$/ ) {
        return sprintf "%04d-%02d-%02d", $1, $2, $3;
    }
    elsif ( $dateBegin =~ /^(\d{1,2})\/(\d{2})\/(\d{4}).*$/ ) {
        return sprintf "%04d-%02d-%02d", $3, $1, $2;
    }

    $self->fail("Can't determine dateBegin from: '$dateBegin'.");
}

sub dateEnd {
    my $self = shift;

    my $dateEnd = $self->_getByFieldName('dateBegin');
    if ( $dateEnd =~ /^(\d{4})-(\d{2})-(\d{2}).*/ ) {
        return sprintf "%04d-%02d-%02d", $1, $2, $3;
    }
    elsif ( $dateEnd =~ /^(\d{1,2})\/(\d{2})\/(\d{4}).*/ ) {
        return sprintf "%04d-%02d-%02d", $3, $1, $2;
    }

    $self->fail("Can't determine dateEnd from: '$dateEnd'.");
}

sub rUnits{
    my $self = shift;

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

sub _isSaleRec {
    my $self = shift;

    my $rUnits       = $self->_getByFieldName('rUnits');
    my $rRevenue     = $self->_getByFieldName('rRevenue');
    my $isbn         = $self->_getByFieldName('rIsbn13');
    my $title        = $self->_getByFieldName('rTitle');
    my $author       = $self->_getByFieldName('rAuthor');

    if ( !$rUnits && !$rRevenue && !$isbn && !$title && !$author || ($author =~ /totals/i) ) {
        return 0;
    }

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


1;
