package BookPub::Import::Importer::Mobcast::Version1;

use strict;

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

sub _fieldMap {
    {
        # Header
        dateBegin    => 'D',
        rServiceName => 'A',

        # Body
        currencyCode => 'F',
        countryCode  => 'L',
        rProductType => 'C',
        isbn         => 'A',
        rTitle       => 'B',
        rUnits       => 'G',
        rListPrice   => 'E',
        rDiscount    => 'I',
        rRevenue     => 'K',
    };
}

sub _processLine {
    my $self = shift;
    my $line = $self->line;
    my $data = $line->[0];

    if ( $data eq 'Total' ) {
        $self->{_headerFound} = undef;
    } else {
        return $self->SUPER::_processLine();
    }
}

sub _processHeader {
    my $self = shift;

    $self->_storeDate();
    $self->_storeService() unless ( $self->_isHeader() );
}

sub _storeDate {
    my $self = shift;
    my $date = $self->_getByFieldName('dateBegin') || return;

    if ( $date =~ s/(Report|Statement) for (\w+)\s+(\d{4})$//i ) {
        $self->{_dateBegin} = "$2 01, $3";
    }
}

sub _storeService {
    my $self = shift;
    my $service = $self->_getByFieldName('rServiceName') || return;

    if ($service) {
        $self->{_serviceName} = $service;
    }
    Log->info("Setting service: $service");
}

sub rServiceName { shift->{_serviceName} }

sub productType {
    my $self = shift;
    my $format = $self->rProductType() || return;

    return BookPub::DB::Item::Sale::kProductTypeEBook if ( $format =~ /N\/A/i );
    return BookPub::DB::Item::Sale::kProductTypeAudioBook if ($format);

    return undef;
}

sub _getDateBegin { shift->{_dateBegin} }

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

    die "Start date not found in header" unless ($startDate);

    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();
}

1;
