package BookPub::Import::Importer::Kobo::Version17;

use strict;

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

sub _headerIdentifier { ( rAuthor => 'Author' ) }

sub _ignoreSheetIndex { 0 }
sub _sheetIndex       { 'all' }

sub _excludedColumns { ('Tax Amount') }

sub _requiredColumnMap {
    {
        countryCode => [ 'Billing Country', 'Country' ],
        dateBegin   => 'Date',
        rSales      => [ 'Quantity',        'Qty' ],
        rReturns    => 'Returns',
        isbn        => [ 'eISBN',           'ISBN' ],
        rTitle      => 'Title',
        rAuthor     => 'Author',
        rListPrice  => [ 'ListPrice',       'List Price' ],
        rCOGS       => [ 'COGS_Percent',    'COGS %' ],
        rRevenue    => 'COGS in Payable Currency',
    };
}

sub _optionalColumnMap {
    {
        rListPriceCurrency => 'List Price Currency',
        currencyCode       => 'Payable Currency',
        rRevenue           => 'COGS in Contractual Currency',
        rComment           => 'Reason',
        rState             => 'State',
        rPostalCode        => 'Zip Code',
    };
}

sub priceType    { 'rrp' }
sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType  { BookPub::DB::Item::Sale::kProductTypeEBook }
sub currencyCode { shift->SUPER::currencyCode() || 'USD' }

sub units {
    my $self = shift;

    if ( lc( $self->sheetname ) =~ /(refund|gift)/i ) {
        return -1;
    }

    my $units = $self->SUPER::units();

    return $units ? $units : 1;
}

sub revenue {
    my $self    = shift;
    my $units   = $self->units();
    my $revenue = $self->SUPER::revenue();

    if ( $units && $units < 0 && $revenue && $revenue > 0 ) {
        return $revenue * -1;
    }

    return $revenue;
}

sub rPostalCode {
    my $postalCode = shift->SUPER::rPostalCode || return;
    $postalCode =~ s|/|-|;
    $postalCode =~ s/_//g;
    $postalCode =~ s/-$//g;

    if ( $postalCode =~ m/^\w{2} (\d{5})$/ ) {
        $postalCode = $1;
    }

    return $postalCode =~ /\d/ ? $postalCode : undef;
}

sub rIsbn13 {
    my $isbn = shift->SUPER::rIsbn13() || return;
    $isbn =~ s/'//g;
    return $isbn;
}

sub _isValidSaleRecord {
    my $self = shift;
    return ( $self->rTitle || $self->rIsbn10 || $self->rIsbn13 ) && $self->dateBegin;
}

sub _isHeader {
    my $self = shift;

    return unless ( $self->line );

    #assert( $self->line, "Line required" );

    my ( $field, $value ) = $self->_headerIdentifier();
    if ( ref($field) ) {
        my ($key) = keys(%$field);
        $value = $field->{$key};
        $field = $key;

        print "V: $value\n";
    }

    my $offset = $self->_getOffset($field);

    if ( defined( $self->line->[$offset] ) && $self->line->[$offset] eq $value ) {
        return 1;
    } else {
        return undef;
    }
}

1;
