package RPS::Import::EMusicAudioBookBFM;

use strict;

use Date::Calc qw(Days_in_Month Decode_Month);

use lib '/app/tools/common/lib';

#use Common::Util;
use Common::Util qw(normalize_date normalize_isrc);
use Common::Consts qw(%COUNTRY_CODE);

use lib '/app/tools/data_classes/lib';
use Client::Service;

use lib '/app/tools/rps/lib';
use RPS::File::Sale;
use RPS::Import::Importer;
use base 'RPS::Import::Importer';

my %field_map = (
    19 => {
        statement_col      => 1,
        date_col           => 3,
        service_product_id => 0,
        client_product_id  => 1,
        artist             => 2,
        album              => 4,
        units              => 7,
        revenue            => 9,
    },
);

#public methods

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

    my $lines    = $args{lines};
    my $version  = $args{file}->VersionNum();
    my $fileName = $args{file}->OrigFileName();
    my $fileObj  = $args{file};
    my $clientID = $args{client_id};

    print STDERR "Client id: $clientID\n";

    if ( $clientID != 4 ) {
        $self->errstr("Client not BFM digital, import cannot continue");
        print STDERR "Client not BFM digital, import cannot continue";
        return undef;
    }

    my @sheets = @{ $args{sheets} };

    return undef unless ($lines);

    my $linenum = 1;

    my $offsets = $field_map{$version};
    my %errors  = ();

    my ( $dateBegin, $dateEnd );

    my $format = RPS::File::Sale::FORMAT_DOWNLOAD;
    my $type   = RPS::File::Sale::TYPE_ALBUM;

    foreach my $line (@$lines) {
        my $album              = $line->[ $offsets->{album} ];
        my $artist             = $line->[ $offsets->{artist} ];
        my $units              = $line->[ $offsets->{units} ];
        my $revenue            = $line->[ $offsets->{revenue} ];
        my $service_product_id = $line->[ $offsets->{service_product_id} ];
        my $client_product_id  = $line->[ $offsets->{client_product_id} ];

        my $price = abs($revenue);

        $price /= abs($units) if ( $units != 0 );

        my $f_dateBegin;

        $f_dateBegin =~ s/\d{2},//;

        if ( $line->[ $offsets->{statement_col} ] =~ /statement summary/i ) {
            $f_dateBegin = $line->[ $offsets->{date_col} ];
            ( $dateBegin, $dateEnd ) = $self->_getDates( date_begin => $f_dateBegin, type => "text" );

        }

        if (   $album
            && $artist
            && $units =~ /\d+/
            && $revenue =~ /\d+/
            && $service_product_id
            && $client_product_id ) {
            unless ( $dateBegin && $dateEnd ) {
                $self->errstr("couldn't get dates from $f_dateBegin");
                print STDERR "couldn't get dates from $f_dateBegin";
                return undef;
            }
            my $sale = RPS::Import::SaleRec->new();
            $sale->productType($type);
            $sale->formatType($format);
            $sale->mediaType(1);
            $sale->serviceProductID($service_product_id);
            $sale->clientProductID($client_product_id);
            $sale->albumName($album);
            $sale->artistName($artist);
            $sale->units($units);
            $sale->price($price);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->countryCode('US');
            $sale->currencyCode('USD');
            $sale->lineNum($linenum);

            #$args{dumper}($sale);  ## for cmd-line testing

            $self->_insertSale( sale => $sale );
        }

        $linenum++;
    }

    return $linenum;
}

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