package RPS::Import::WMG::SprintSingleFormat;

use strict;

use lib '/app/tools/common/lib';
use Common::Util qw(normalize_isrc);

use lib '/app/tools/data_classes/lib';

use RPS::File::Sale;
use lib '/app/tools/rps/lib';
use RPS::Import::WMG::Util;
use base 'RPS::Import::WMG::SprintBase';

my %field_map = (
    21 => {
        title     => 0,
        date      => 1,
        units     => 3,
        isrc      => 4,
        retail    => 6,
        price     => 10,
        priceType => 11,
    },
);

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

    my $sheets  = $args{sheets};
    my $version = $self->_version;
    my $fileObj = $args{file};

    my $fileName = $fileObj->OrigFileName();

    #my $fileName = $args{OrigFileName};

    my ( $billTo, $sellTo ) = RPS::Import::WMG::Util::getWirelessInfo( $self->{fileServiceID} );
    unless ( $billTo && $sellTo ) {
        $self->warning();
        print STDERR "unknown billto/sellto mapping: $self->{fileServiceID}\n";
    }

    $fileObj->Atomic(1);
    $fileObj->Save();

    my $formatName = $self->_decodeSprintFormatID($fileName);
    my $format     = RPS::Import::WMG::Util::getWirelessFormatTypeID($formatName);

    unless ( $formatName && $format ) {
        $self->errstr('can\'t get format');
        print STDERR "unknown format in $fileName\n";
        return;
    }

    my $offsets  = $field_map{$version};
    my $prodType = RPS::File::Sale::TYPE_TRACK;
    my %errors;
    my $i = 0;

    foreach my $sheet (@$sheets) {
        my $linenum = 100000 * ( $i + 1 );    # keeps linenum unique for each sheet
        foreach my $line (@$sheet) {
            my $date = $self->numericToDate( $line->[ $offsets->{date} ] );
            my ( $dateBegin, $dateEnd ) = $self->_getDates( $line->[ $offsets->{date} ] );

            my $title     = $line->[ $offsets->{title} ];
            my $isrc      = normalize_isrc( $line->[ $offsets->{isrc} ] );
            my $units     = $self->numeric( $line->[ $offsets->{units} ] );
            my $retail    = $self->numeric( $line->[ $offsets->{retail} ] );
            my $price     = $self->numeric( $line->[ $offsets->{price} ] );
            my $priceType = $line->[ $offsets->{priceType} ];

            if ( $title && $units && $retail && $price =~ m/\d/ ) {
                unless ( $dateBegin && $dateEnd ) {
                    $self->errstr("couldn't get dates");
                    $linenum++;
                    next;
                }

                $price /= $units if ( $units != 0 );
                my $ppdRate = $retail ? $price / $retail : 0;

                my $sale = RPS::Import::SaleRec->new();

                $sale->productType($prodType);
                $sale->formatType($format);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->trackName($title);
                $sale->isrc($isrc);
                $sale->units($units);
                $sale->price($price);
                $sale->retail($retail);
                $sale->wholesaleRate($ppdRate);
                $sale->priceType($priceType);
                $sale->lineNum($linenum);
                $sale->payoutType($date);

                #$args{dumper}($sale); # for cmd-line testing
                $self->_insertSale( sale => $sale );
            }    #else { print STDERR "skip u: $units p: $price t: $track ($linenum)\n" }
            $linenum++;
        }
        $i++;
    }

    return 1;
}

#
# Private methods
#

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