package BookPub::Import::Importer::PermaBound::v1;

use strict;
use warnings;

use constant RE_YEAR_MONTH => qr/^.+_(\d{4})_(0[1-9]|1[0-2])\..+$/;

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


sub _fieldMap {
    # SERVICE: 216, VERSION: 1
    {
        rTitle     => 'B',
        rIsbn13    => 'A',
        rUnits     => 'C',
        rListPrice => 'D',
        rDiscount  => 'E',
        rRevenue   => 'F',
    };
}

sub _headerIdentifier    { rRevenue => 'NET AMT' }
sub _useIsSaleRec        { 1 }
sub priceType            { 'rrp' }
sub countryCode          { 'US' }
sub currencyCode         { 'USD' }
sub rListPriceCurrency   { 'USD' }
sub productType          { BookPub::DB::Item::Sale::kProductTypeEBook }
sub rProductType         { BookPub::DB::Item::Sale::kProductTypeEBook }
sub purchaseType         { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub priceTypeQualifierID { BookPub::DB::Item::PriceTypeQualifier::kSchoolLibrary }

sub rServiceName {
    return BookPub::Tracker::Service::GetDefaultServiceName(
        service_id => shift->serviceID
    );
}

sub dateBegin {
    my $self = shift;

    # used cached version, if it exists
    return $self->{_dateBegin} if $self->{_dateBegin};

    my $filename = $self->filename() || '';
    if ( my ($year, $month) = $filename =~ RE_YEAR_MONTH ) {
        $self->{_dateBegin} = sprintf "%04d-%02d-%02d", $year, $month, 1;
        return $self->{_dateBegin};
    }

    $self->fail("Unexpected filename format, can't determine date: $filename");
}

sub dateEnd {
    my $self     = shift;

    # used cached version, if it exists
    return $self->{_dateEnd} if $self->{_dateEnd};

    my $filename = $self->filename() || '';
    if ( my ($year, $month) = $filename =~ RE_YEAR_MONTH ) {
        my $day = Date::Simple::days_in_month( $year, $month );
        $self->{_dateEnd} = sprintf "%04d-%02d-%02d", $year, $month, $day;
        return $self->{_dateEnd};
    }

    $self->fail("Unexpected filename format, can't determine date: $filename");
}

sub _isSaleRec {
    my $self = shift;

    return if $self->{_endOfData};

    unless ( $self->SUPER::_isSaleRec ) {
        $self->{_endOfData} = 1;
        return;
    }

    return 1;
}

1;
