package BookPub::Import::Importer::Faithlife::v2;

use strict;
use warnings;

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

sub _fieldMap {
    my $self = shift;

    my %map = (
        2 => {
            rTitle         => 'A',
            rSubtitle      => 'A',
            rIsbn13        => 'B',
            rUnits         => 'E',
            rListPrice     => 'C',
            rPurchasePrice => 'D',
            rRevenue       => 'F',
        },
        3 => {
            rTitle         => 'B',
            rSubtitle      => 'B',
            rIsbn13        => 'C',
            rUnits         => 'E',
            rPurchasePrice => 'D',
            rRevenue       => 'F',
        }
    );

    return $map{ $self->_version }
}

sub _headerIdentifier { rTitle => 'Publisher Title' }

sub _autoParseTitleAndSubtitle { 1 }
sub _useIsSaleRec              { 1 }
sub rServiceName               { 'Faithlife' }
sub priceType                  { 'rrp' }
sub countryCode                { 'US' }
sub currencyCode               { 'USD' }
sub rListPriceCurrency         { 'USD' }
sub rPurchasePriceCurrency     { 'USD' }
sub productType                { BookPub::DB::Item::Sale::kProductTypeEBook }
sub purchaseType               { BookPub::DB::Item::Sale::kPurchaseTypeDownload }

my %months = (
    jan => 1,
    feb => 2,
    mar => 3,
    apr => 4,
    may => 5,
    jun => 6,
    jul => 7,
    aug => 8,
    sep => 9,
    oct => 10,
    nov => 11,
    dec => 12,
);

sub _getDateBegin {
    my $self = shift;

    return $self->{_begin_date} if $self->{_begin_date};

    my $filename = $self->filename;
    if ( $filename =~ /(\w{3})(?:\w{1,6})?[ _](\d{4})/ ) {
        return $self->{_begin_date} = $2 . "-" . $months{ lc($1) } . "-01";
    }

    $self->fail("Unable to determine date begin from file name.");
}

sub rTitle {
    my $self = shift;

    my $str = $self->_getByFieldName('rTitle') || '';
    my ($title, $subTitle) = split ':', $str;

    return $title;
}

sub rSubtitle {
    my $self = shift;

    my $str = $self->_getByFieldName('rSubtitle') || '';
    my ($title, $subTitle) = split ':', $str;
    $subTitle =~ s/^\s|\s$//g if $subTitle;

    return $subTitle;
}

sub rUnitPrice {
    my $self = shift;

    if ( $self->_version == 3 ) {
        return $self->rRevenue / $self->rUnits;
    }

    $self->SUPER::rUnitPrice();
}


sub _processLine {
    my $self = shift;

    if ( $self->rTitle() =~ /Grand Total/i ) {
        $self->{_endOfData} = 1;
        return;
    }

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

sub _isSaleRec {
    my $self = shift;

    return if $self->{_endOfData};

    if ( $self->_version == 3 ) {
        return if !$self->rSubtitle && !$self->rIsbn13;
    }

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


1;
