package RPS::Import::MusicNowOld;
## for when they were FullAudio

use strict;

use Date::Calc qw(Days_in_Month);

use lib '/app/tools/common/lib';
use Common::Util;
use Common::Consts;

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

#private constants
use constant FIELD_VENDORID => 0;
use constant FIELD_TRACKID  => 1;
use constant FIELD_ISRC     => 2;
use constant FIELD_SONGCODE => 3;
use constant FIELD_TRACK    => 4;
use constant FIELD_ARTIST   => 5;
use constant FIELD_ALBUM    => 6;
use constant FIELD_UPC      => 7;
use constant FIELD_LABEL    => 8;
use constant FIELD_DISCNUM  => 9;
use constant FIELD_TRACKPOS => 10;
use constant FIELD_UNITS    => 11;
use constant FIELD_DAYSPLAY => 12;
use constant FIELD_MONTH    => 13;
use constant FIELD_PRICE    => 14;

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

#public methods

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

    my $lines   = $args{lines};
    my $fileObj = $args{file};

    #my $fileName = $args{OrigFileName}; # for cmd-line testing
    my $fileName = $fileObj->OrigFileName;

    unless ( $lines && $fileName ) {
        $self->errstr("lines and filename absent");
        return 0;
    }

    my ($year) = $fileName =~ m/\_Q\d(\d\d).txt$/;

    my $linenum = 1;
    foreach my $line (@$lines) {
        my $prodtype = RPS::File::Sale::TYPE_TRACK;

        my $upc    = Common::Util::normalize_upc( $line->[FIELD_UPC] );
        my $isrc   = Common::Util::normalize_isrc( $line->[FIELD_ISRC] );
        my $artist = $line->[FIELD_ARTIST];
        my $album  = $line->[FIELD_ALBUM];

        my $track = $line->[FIELD_TRACK];

        ## a bit of a guess ATM
        ## $format = RPS::File::Sale::FORMAT_DOWNLOAD;
        my $format = RPS::File::Sale::FORMAT_STREAM;

        my $units = $line->[FIELD_UNITS];
        my $price = $line->[FIELD_PRICE];
        if ( $units > 0 ) {
            $price = $price / $units;
        } else {
            print STDERR "zero units for an entry!\n";
        }

        my $month = $line->[FIELD_MONTH];
        my ( $dateBegin, $dateEnd ) = _getDates( $year, $month );

        if ( $dateBegin && $dateEnd && $prodtype && $format && $units && $price >= 0 && $album && $track ) {
            my $sale = RPS::Import::SaleRec->new();

            $sale->productType($prodtype);
            $sale->formatType($format);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->upc($upc);
            $sale->isrc($isrc);
            $sale->artistName($artist);
            $sale->albumName($album);
            $sale->trackName($track);
            $sale->units($units);
            $sale->price($price);
            $sale->lineNum($linenum);

            #$args{dumper}($sale);  ## for cmd-line testing
            $self->_insertSale( sale => $sale );
        }
        $linenum++;
    }
    return $linenum;
}

#
# Private methods
#

sub _getDates {
    my $year  = shift;
    my $month = shift;

    $year += 2000 if ( $year < 2000 );
    $month =~ s/^0//g;

    my $dateBegin = sprintf( "%04d-%02d-01", $year, $month );
    my $dateEnd = sprintf( "%04d-%02d-%02d", $year, $month, Days_in_Month( $year, $month ) );

    return ( $dateBegin, $dateEnd );
}

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