package RPS::Import::Navarre;

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

use constant DATE_ROW => 1;
use constant DATE_COL => 0;

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

my %field_map = (

                 1 => {
                        'vendorid'  => 0,
                        'upc'       => 1,
                        'label'     => 5,
                        'artist'    => 9,
                        'album'     => 13,
                        'outlet'    => 16,
                        'sales'     => 17,
                        'returns'   => 18,
                        'net'       => 19,
                        's_price'   => 20,
                        'r_price'   => 21,
                        'n_price'   => 22,
                        'total'     => 25,
                        },
                 2 => {
                        'vendorid'  => 0,
                        'upc'       => 1,
                        'label'     => 3,
                        'artist'    => 5,
                        'album'     => 7,
                        'outlet'    => 10,
                        'sales'     => 11,
                        'returns'   => 12,
                        'net'       => 13,
                        's_price'   => 14,
                        'r_price'   => 15,
                        'n_price'   => 16,
                        'total'     => 21,
                        },
);

#public methods

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

	my $retval = undef;
	my $lines = $args{lines};
    my $fileObj = $args{file};
    my $version = $fileObj->VersionNum;
    ##my $version = $args{version}; # for cmd-line testing

	return undef unless ($lines && $version);

    my $offsets = $field_map{$version};

	my $currCode;
	my $convRate;
	my $dateBegin;
	my $dateEnd;

	($dateBegin, $dateEnd) = $self->_getDates($lines->[DATE_ROW]->[DATE_COL]);

	unless ($dateBegin && $dateEnd)
	{
        $self->errstr("couldn't get dates from ".($lines->[DATE_ROW]->[DATE_COL]));
        return undef;
    }

    my $linenum = 1;
    foreach my $line(@$lines)
    {
        my $prodtype  = RPS::File::Sale::TYPE_PHYSICAL;
        my $vendorID  = $line->[$offsets->{vendorid}];
        my $upc       = Common::Util::normalize_upc($line->[$offsets->{upc}]);
        my $artist    = $line->[$offsets->{artist}];
        my $album     = $line->[$offsets->{album}];
        my $label     = $line->[$offsets->{label}];
        my $outlet    = $line->[$offsets->{outlet}];

        #my $format = RPS::File::Sale::FORMAT_PHYSICAL;

        my ($sales)		= $line->[$offsets->{sales}] =~ m/^(-?\d+)$/;
        my ($returns)	= $line->[$offsets->{returns}] =~ m/^(-?\d+)$/;
        my ($s_price)	= $line->[$offsets->{s_price}] =~ m/^(-?\d*\.?\d*)$/;
        my ($r_price)	= $line->[$offsets->{r_price}] =~ m/^(-?\d*\.?\d*)$/;
        my ($t_price)	= $line->[$offsets->{total}] =~ m/^(-?\d*\.?\d*)$/;

        my $price_level = RPS::File::Sale::PLEVEL_UNKNOWN;

        my $channel = RPS::File::Sale::CHANNEL_RETAIL;
        $channel = RPS::File::Sale::CHANNEL_MILITARY if ($outlet =~ m/aafes/i);
        $channel = RPS::File::Sale::CHANNEL_MILITARY if ($outlet =~ m/eurpac/i);
        $channel = RPS::File::Sale::CHANNEL_MILITARY if ($outlet =~ m/softland/i);

        $returns *= -1;
        $r_price *= -1;

        if ($prodtype && ($sales || $returns) && $artist && $album)
        {
            my $sale = RPS::Import::SaleRec->new();

            $sale->productType($prodtype);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->serviceProductID($vendorID);
            $sale->upc($upc);
            $sale->artistName($artist);
            $sale->albumName($album);
            $sale->labelName($label);
            $sale->outlet($outlet);
            $sale->sales($sales);
            $sale->salesRevenue($s_price);
            $sale->returns($returns);
            $sale->returnsRevenue($r_price);
            $sale->totalRevenue($t_price);
            $sale->priceLevel($price_level);
            $sale->channel($channel);
            $sale->countryCode('US');
            $sale->lineNum($linenum);

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

	return $linenum;
}

#
# Private methods
#


sub _getDates
{
	my $self = shift;
	my $date = shift;
    my ($dateBegin, $dateEnd);

    $date =~ m/^(\d{2})\/(\d{2})\/(\d{4})\s*-\s*(\d{2})\/(\d{2})\/(\d{4})$/;

    $dateBegin = $3."-".$2."-".$1;
    $dateEnd   = $6."-".$5."-".$4;

    ($dateBegin, $dateEnd) = Common::Util::normalize_sales_month_dates($dateBegin, $dateEnd) if ($dateBegin && $dateEnd);

	return ($dateBegin, $dateEnd);
}

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