package BookPub::Import::Importer::Aldi::v1;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use Common::Country;

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

sub _fieldMap {
    {
        dateBegin            => 'F',
        dateEnd              => 'F',
        rProductType         => 'B',
        rTitle               => 'E',
        rIsbn10              => 'C',
        rIsbn13              => 'D',
        countryCode          => 'M',
        rUnits               => 'G',
        rPurchasePrice       => 'N',
        rDiscount            => 'L',
        rRevenue             => 'H',
        rPromoCode           => 'A',
        rModel               => 'I',
        rTransactionCategory => 'J',
        rComments            => 'K',
    };
}

sub _headerIdentifier { rProductType => 'ONIX_PRODUCT_FORM' }

sub _useIsSaleRec          { 1 }
sub rServiceName           { 'Aldi' }
sub priceType              { 'rrp' }
sub rPurchasePriceCurrency { 'AUD' }
sub currencyCode           { 'AUD' }
sub purchaseType           { BookPub::DB::Item::Sale::kPurchaseTypePhysicalRetail }

sub dateBegin {
    my $self = shift;

    my $date = $self->_getByFieldName('dateBegin') || '';

    if ( $date =~ /^\d{5}$/ && $date > 38716 ) {
        $date = Spreadsheet::ParseExcel::Utility::ExcelFmt( 'yyyy-mm-dd', $date );
        return $date;
    }

    $self->fail("Unable to determine date begin from: '$date'");
}

sub dateEnd {
    my $self = shift;

    my $date = $self->_getByFieldName('dateEnd') || '';

    if ( $date =~ /^\d{5}$/ && $date > 38716 ) {
        $date = Spreadsheet::ParseExcel::Utility::ExcelFmt( 'yyyy-mm-dd', $date );
        return $date;
    }

    $self->fail("Unable to determine date end from: '$date'");
}

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('rProductType') || '';

    my @physical_book_types = (
        qr/^Board book$/i,
        qr/^Paperback \/ softback$/i,
        qr/^Hardback$/i,
        qr/^CD-Audio$/i,
        qr/^Multiple copy pack$/i,
        qr/^Dumpbin – filled$/i,
        qr/^Other point of sale$/i,
        qr/^Rag book$/i,
        qr/^Bath book$/i,
        qr/^Cards$/i,
        qr/^Poster$/i,
        qr/^Counterpack – filled$/i,
        qr/^Shrink-wrapped pack$/i,
    );

    return BookPub::DB::Item::Sale::kProductTypePhysicalBook if grep { $type =~ $_ } @physical_book_types;

    $self->fail("Unable to determine product type from: '$type'");
}

sub rUnitPrice {
    my $self = shift;

    return $self->rRevenue / $self->rUnits;
}

sub rRevenue {
    my $self = shift;

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

sub rUnits {
    my $self = shift;

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

sub rPurchasePrice {
    my $self = shift;

    my $price = $self->_getByFieldName('rPurchasePrice') || 0;
    return $price;
}

sub isFree {
    my $self = shift;

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

sub _isSaleRec {
    my $self = shift;

    return 0 if !$self->rIsbn13 && !$self->rUnits && !$self->rRevenue;

    return 1;
}


1;
