package RPS::Import::DMX;

use strict;


use Date::Calc qw(Days_in_Month);

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

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

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

# header record
use constant ROW_DATE       => 2;
use constant FIELD_DATE     => 5;

# detail records
use constant FIELD_ARTIST   => 0;
use constant FIELD_TITLE    => 1;
use constant FIELD_VENDORID => 2;
use constant FIELD_SERVICEID=> 3;
use constant FIELD_PRICE    => 5;

#
# Private methods
#

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

    return undef unless $args{sheets};

    my $iSheet = 0;
    my $lineNum = 0;
    foreach my $sheet(@{ $args{sheets} })
    {
        my ($dateBegin, $dateEnd) = _getDates($sheet->[ROW_DATE][FIELD_DATE]);
        unless ($dateBegin && $dateEnd)
        {
            print STDERR "couldn't get dates ($iSheet)\n";
            $iSheet++;
            next;
        }

        $lineNum = 0;
        foreach my $line(@{ $sheet })
        {
            my $artist = $line->[FIELD_ARTIST];
            my $track = $line->[FIELD_TITLE];
            my ($price) = $line->[FIELD_PRICE] =~ /^(\d+[\.]?\d*)/;
            my ($serviceID) = $line->[FIELD_SERVICEID] =~ /^(\d+-\d+)/;
            my $vendorID = $line->[FIELD_VENDORID];

            if ($price && $serviceID && $artist && $track)
            {
                my $sale = RPS::Import::SaleRec->new();

                $sale->productType(RPS::File::Sale::TYPE_TRACK);
                $sale->formatType(RPS::File::Sale::FORMAT_DOWNLOAD);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->serviceProductID($serviceID);
                $sale->clientProductID($vendorID);
                $sale->artistName($artist);
                $sale->trackName($track);
                $sale->units(1);
                $sale->price($price);
                $sale->lineNum($lineNum);

                $self->_insertSale(sale => $sale);
            }
            $lineNum++;
        }
        $iSheet++;
    }

    return $lineNum;
}

sub _getDates
{
    my $dateField = shift || return undef;

    my ($month, $year) = split /\//, $dateField;

    return (
            sprintf("%d-%02d-01", $year, $month),
            sprintf("%d-%02d-%d", $year, $month, Days_in_Month($year, $month)),
           );
}

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