package BookPub::Import::Importer::Gardners::Version1;

use strict;

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

use Date::Calc qw( Add_Delta_YM );

sub _headerIdentifier { ( rTitle => 'TITLE' ) }

sub _fieldMap {
    {
        # In the header
        dateBegin => 'A',
        priceType => 'F',

        # In the data
        rFormat    => 'B',
        rIsbn13    => 'A',
        rTitle     => 'C',
        rAuthor    => 'D',
        rUnits     => 'E',
        rListPrice => 'F',
        rDiscount  => 'G',
        rRevenue   => 'H',
    };
}

sub currencyCode { 'GBP' }
sub countryCode  { 'UK' }
sub priceType    { 'rrp' }
sub purchaseType { BookPub::DB::Item::Sale::kPurchaseTypeDownload }
sub productType  { BookPub::DB::Item::Sale::kProductTypeEBook }

# Need to grab the date and discount from the header rows
sub _processHeader {
    my $self = shift;

    $self->_storeDates();
}

sub _storeDates {
    my $self = shift;

    return if ( $self->{_dateBegin} );

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

    if ( $date && $date =~ /(\d{1,2})\/(\d{1,2})\/(\d{4})/ ) {
        my ( $year, $month, $day ) = Add_Delta_YM( $3, $2, $1, 0, -1 );

        $self->{_dateBegin} = sprintf( "%04d-%02d-%02d", $year, $month, $day );
    }
}

sub _getDateBegin { shift->{_dateBegin} }

sub dateBegin {
    my $self      = shift;
    my $startDate = $self->_getDateBegin();

    my $date = new Common::Date( date => $startDate, type => $self->_dateFormat() );

    return $date->monthBegin();
}

sub dateEnd {
    my $self    = shift;
    my $endDate = $self->_getDateBegin();

    my $date = new Common::Date( date => $endDate, type => $self->_dateFormat() );
    return $date->monthEnd();
}

sub _parseFormat {
    my ( $self, $type ) = @_;
    return $type =~ /EPUB/i
      ? BookPub::DB::Item::Sale::kFormatTypeEPub
      : return $self->SUPER::_parseFormat($type);
}

1;
