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.
###
