package RPS::Import::WMG::WarnerEarly;

use strict;


use Date::Calc qw(Days_in_Month);

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

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';

use constant FIELD_PRODUCT  => 0;
use constant FIELD_TRACK    => 1;
use constant FIELD_ARTIST   => 3;
use constant FIELD_UPC      => 4;
use constant FIELD_PRICE    => 5;
use constant FIELD_FORMAT   => 7;
use constant FIELD_UNITS    => 8;

#
# public methods
#

sub _importLines
{
    my $self = shift;
    my %args = @_;
    my $fileName = $args{file}->OrigFileName;
    #my $fileName = $args{OrigFileName}; # for cmd-line testing
    my $sheets = $args{sheets};

    return undef unless ($sheets);

    my ($dateBegin, $dateEnd) = _get_dates($fileName);

    unless ($dateBegin && $dateEnd)
    {
        $self->errstr("couldn't get dates");
        print STDERR "fileName: $fileName\n";
        return undef;
    }

    my $linenum;
    foreach my $lines(@$sheets)
    {
        $linenum = 1;

        foreach my $line (@$lines)
        {
            my $svc_format = uc($line->[FIELD_FORMAT]);
            unless ($svc_format =~ /STR|PLAYS|DL/)
            {
                print STDERR "unknown format ($svc_format)";
                $linenum++;
                next;
            }
            my $format = $svc_format =~ /^DL$/ ? RPS::File::Sale::FORMAT_TETHERED : RPS::File::Sale::FORMAT_STREAM;
            my $prodtype  = RPS::File::Sale::TYPE_TRACK;

            my $prod_id = $line->[FIELD_PRODUCT];
            my $upc     = normalize_upc($line->[FIELD_UPC]);
            my $artist  = $line->[FIELD_ARTIST];
            my $track   = $line->[FIELD_TRACK];
            my ($units) = $line->[FIELD_UNITS] =~ m/^(-?\d*\.?\d+)$/;
            my ($price) = $line->[FIELD_PRICE] =~ m/^(\d*\.?\d+)$/;

            if (($upc || $artist) && $track && $units)
            {
                if ($self->{fileServiceID} == Client::Service::DSP_MUZE)
                {
                    $price /= 100;
                    $units = sprintf("%0.0f", $units);
                }

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

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

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

#
# Private methods
#

sub _get_dates
{
    my $fName = shift;

    return undef unless ($fName =~ m/_?(\d\d)(\d\d)(\d{4})_(\d\d)(\d\d)(\d{4})_?/);
    my ($month1, $day1, $year1, $month2, $day2, $year2) = ($1, $2, $3, $4, $5, $6);

    return (
        sprintf("%04d-%02d-01", $year1, $month1), 
        sprintf("%04d-%02d-%02d", $year2, $month2, Days_in_Month($year2, $month2))
    );
}

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