package BookPub::Import::Importer::BBCAudio::BBCAudio1;

use strict;

use lib '/app/tools/bookpub/lib';
use BookPub::DB::Item::Sale;
use BookPub::Import::SaleRec;
use base 'BookPub::Import::Importer';

#public methods
sub _importLines {
    my $self = shift;
    my %args = @_;

    my $saleCount = 0;
    my $fieldMap  = $self->_getFieldMap();
    my @sheetList = $self->can('_getSheetList') ? $self->_getSheetList() : 0;

    foreach my $sheetIndex (@sheetList) {
        Common::Log::Print("process sheet $sheetIndex");
        my $lines = $args{sheets}[$sheetIndex];

        for ( my $i = 1 ; $i < scalar @$lines ; $i++ ) {
            my $isbn13  = $lines->[$i][ $fieldMap->{isbn13} ];
            my $title   = $lines->[$i][ $fieldMap->{title} ];
            my $revenue = $lines->[$i][ $fieldMap->{netRevenue} ];
            next unless ( $revenue =~ m/\d/ and ( $isbn13 or $title ) );

            # currently, they're only supplying the last day of the month
            my ( $beginDate, $endDate ) = $self->_getDates( date_begin => $lines->[$i][ $fieldMap->{date} ] );
            unless ( $beginDate and $endDate ) {
                Common::Log::Print( 'bad date: ' . $lines->[$i][ $fieldMap->{date} ] );
                $self->errstr('bad date');
                return undef;
            }

            $title =~ s/\s*\-\s*(libdig|mp3cd|ucd)\s*$//;

            #$beginDate = $endDate = Common::Util::normalize_date($lines->[$i][ $fieldMap->{date} ]);
            my $svcProdID = $lines->[$i][ $fieldMap->{svcProdID} ];
            my $returns   = $lines->[$i][ $fieldMap->{returns} ];
            my $sales     = $lines->[$i][ $fieldMap->{sales} ];
            my $listPrice = $lines->[$i][ $fieldMap->{listPrice} ];
            my $formatTmp = $lines->[$i][ $fieldMap->{format} ];
            my $format    = $self->_parseFormat($formatTmp);

            unless ($format) {
                Common::Log::Print("unknown format: '$formatTmp'");
                next;
            }

            my $units = $sales - $returns;
            my $unitPrice = $units ? $revenue / $units : 0;

            my $saleRec = BookPub::Import::SaleRec->new();

            # defaults
            $saleRec->lineNum( $i + 1 );
            $saleRec->countryCode('US');
            $saleRec->currencyCode('USD');
            $saleRec->productType(BookPub::DB::Item::Sale::kProductTypeAudioBook);
            $saleRec->purchaseType(BookPub::DB::Item::Sale::kPurchaseTypeDownload);

            $saleRec->dateBegin($beginDate);
            $saleRec->dateEnd($endDate);

            $saleRec->formatType($format);
            $saleRec->serviceProductID($svcProdID);
            $saleRec->units($units);
            $saleRec->listPrice($listPrice);
            if ($unitPrice) {
                $saleRec->discount( BookPub::Import::Importer::CalculateDiscount( $unitPrice, $listPrice ) );
                $saleRec->unitPrice($unitPrice);
            }
            $saleRec->revenue($revenue);

            $saleRec->rFormat($format);
            $saleRec->rIsbn13($isbn13);
            $saleRec->rTitle($title);
            $saleRec->rSales($sales);
            $saleRec->rReturns($returns);
            $saleRec->rUnits($units);
            $saleRec->rListPrice($listPrice);
            $saleRec->rRevenue($revenue);

            #$args{dumper}($saleRec);
            $self->_insertSale( sale => $saleRec );
            $saleCount++;
        }
    }

    return $saleCount;
}

sub _parseFormat {
    my ( $self, $fmt ) = @_;

    return $fmt =~ m/mp3/
      ? BookPub::DB::Item::Sale::kFormatTypeAudioMP3
      : BookPub::DB::Item::Sale::kFormatTypeAudioUnknown;
}

###
1;    # Play nicely.
###
