package RPS::Import::NineSquaredMisc;

use strict;


use Date::Calc qw(Days_in_Month Decode_Month);
use Spreadsheet::ParseExcel;

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

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

my %field_map = (
                 5 => {
                        'vendorid' => 0,
                        'artist'   => 1,
                        'track'    => 2,
                        'units'    => 10,
                        'price'    => 12,
                        },
                 6 => {
                        'vendorid' => 0,
                        'artist'   => 1,
                        'track'    => 2,
                        'units'    => 9,
                        '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 $fileObj = $args{file};
	my $lines = $args{lines};
    my $version = $fileObj->VersionNum;
    my $fileName = $fileObj->OrigFileName;
    ##my $fileName = $args{OrigFileName}; # for cmd-line testing

    return undef unless ($lines);

    my $offsets = $field_map{$version};

    my ($dateBegin, $dateEnd) = $self->_getDates($fileName);

    unless ($dateBegin && $dateEnd) {
        $self->errstr("couldn't get dates");
        return undef;
    }

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

		my $vendorID   	= $line->[$offsets->{vendorid}];
		my $artist	   	= $line->[$offsets->{artist}];
		my $track	   	= $line->[$offsets->{track}];
		my $units	   	= $line->[$offsets->{units}];
		my $total_price	= $line->[$offsets->{price}];
		my $price = $total_price / $units if($units != 0);

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

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

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

#
# Private methods
#

sub _getDates {
    my $self = shift;
    my $fname = shift;

    if ($fname =~ m/Q[1234] (\d{4}) Summary-(\w+)/) {
        my $year  = $1;
        my $month = Decode_Month($2);
        my $dateBegin = sprintf("%04d-%02d-%02d", $year, $month, 1);
        my $dateEnd   = sprintf("%04d-%02d-%02d", $year, $month, Days_in_Month($year,$month));
        return ($dateBegin, $dateEnd);
    }
    return undef;
}

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