package RPS::Import::Fusion;

use strict;


use Data::Dumper;
use Date::Calc qw(Days_in_Month Decode_Month);

use lib '/app/tools/common/lib';
use Common::Util;
use Common::Consts;
use Common::Log;

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

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

use constant DATE_ROW       => 3;
use constant DATE_START_COL => 14;
use constant DATE_END_COL   => 18;

use constant FIELD_CATNO   => 0;
use constant FIELD_ALBUM   => 1;
use constant FIELD_FORMAT  => 2;
use constant FIELD_SALES   => 10;
use constant FIELD_RETURNS => 11;
use constant FIELD_DEFECTS => 12;
use constant FIELD_RETAIL   => 14;
use constant FIELD_WHOLESALE   => 18;
use constant FIELD_PRICE   => 19;
use constant FIELD_TOTAL   => 20;

#public methods

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

	my $retval = undef;
    my $sheets = $args{sheets};

    my $linenum;

    foreach my $sheet (@$sheets) {

        #for (my $i = 0; $i < 20; $i++) {
            #print "line $i: ".$sheet->[$i]->[DATE_START_COL]."\n";
        #}
        #print "\n";
        #next;

	    my ($dateBegin, $dateEnd) = $self->_getDates($sheet->[DATE_ROW]->[DATE_START_COL],
                                                     $sheet->[DATE_ROW]->[DATE_END_COL]);

	    unless ($dateBegin && $dateEnd) {
            $self->errstr("couldn't get dates from ".$sheet->[DATE_ROW]->[DATE_START_COL]);
            print STDERR "couldn't get dates from ".$sheet->[DATE_ROW]->[DATE_START_COL]."\n";
            return undef;
        }

        my $comp_date = $dateBegin;
        $comp_date =~ s/\-//g;

        $linenum = 1;
        $linenum = 10 if($comp_date>200706);
        my $prev_catno  = "";
        my $prev_album  = "";
        my $prev_format = "";
        foreach my $line (@$sheet)
        {
            my $prodtype    = RPS::File::Sale::TYPE_PHYSICAL;
            my $price_level = RPS::File::Sale::PLEVEL_UNKNOWN;
            my $channel     = RPS::File::Sale::CHANNEL_RETAIL;
            my $catno       = $line->[FIELD_CATNO];
            my $album       = $line->[FIELD_ALBUM];
            my $format      = $line->[FIELD_FORMAT];

            my ($sales)	    	= $line->[FIELD_SALES] =~ m/^(-?\d+)$/;
            my ($returns)   	= $line->[FIELD_RETURNS] =~ m/^(-?\d+)$/;
            my ($defects)   	= $line->[FIELD_DEFECTS] =~ m/^(-?\d+)$/;
            my ($price)      	= $line->[FIELD_PRICE] =~ m/^(-?\d*\.?\d*)$/;
            my ($total_price) 	= $line->[FIELD_TOTAL] =~ m/^(-?\d*\.?\d*)$/;
            my ($retail_price) 	= $line->[FIELD_RETAIL] =~ m/^(-?\d*\.?\d*)$/;
            my ($wholesale_price) 	= $line->[FIELD_WHOLESALE] =~ m/^(-?\d*\.?\d*)$/;


            # 'defects' is used just to reduce the number of sales.
            # but they aren't really returns.
            $sales -= $defects;
            $sales = 0 if $sales < 0;

            if (($sales || $returns) && $catno eq "") {
                #print STDERR "got one: $prev_catno / $prev_album / $prev_format\n";
                $catno  = $prev_catno;
                $album  = $prev_album;
                $format = $prev_format;
            }

            my $sales_price   = $sales * $price;
            my $returns_price = $returns * $price;

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

                $sale->productType($prodtype);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->clientProductID($catno);
                $sale->albumName($album);
                $sale->sales($sales);
                $sale->retailPrice($retail_price);
                $sale->wholesalePrice($wholesale_price);
                $sale->salesRevenue($sales_price);
                $sale->returns($returns);
                $sale->returnsRevenue($returns_price);
                $sale->totalRevenue($total_price);
                $sale->priceLevel($price_level);
                $sale->channel($channel);
                $sale->configuration($format);
                $sale->countryCode('CA');
                $sale->currencyCode('CAD');
                $sale->lineNum($linenum);

                #$args{dumper}($sale);  ## for cmd-line testing
                $self->_insertSale(sale => $sale);
            }
            #else { print STDERR "skipping $linenum: $catno\n"; }
            $prev_catno  = $catno;
            $prev_album  = $album;
            $prev_format = $format;
            $linenum++;
        }
    }

	return $linenum;
}

#
# Private methods
#


sub _getDates
{
	my $self = shift;
	my $date1 = shift;
	my $date2 = shift;

    if ($date1 =~ m/^\d{4}-\d{2}-\d{2}$/ && $date2 =~ m/^\d{4}-\d{2}-\d{2}$/) {
        return ($date1, $date2);
    } else {
        return undef;
    }
}

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