package RPS::Import::DTInternational;

use strict;


use Date::Calc qw(Add_Delta_Days);

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

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 HEADER_ROW => 0;

use constant FIELD_SECTION    => 1;
use constant FIELD_SUBSECTION => 2;

use constant FIELD_DATE     => 6;
use constant FIELD_VENDORID => 8;
use constant FIELD_OUTLET   => 10;
use constant FIELD_ALBUM    => 12;
use constant FIELD_PRICE    => 14;
use constant FIELD_UNITS    => 16;

#public methods

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

    my $sheets = $args{sheets};

    my $linenum;

    for my $sheet (@$sheets) {

        $linenum = 1;
        my $country = "";

        ## check if the sheet has the extra Memo column
        my $hasmemo = 0;
        $hasmemo = 2 if ($sheet->[HEADER_ROW]->[FIELD_ALBUM] eq 'Memo');

        foreach my $line(@$sheet)
        {

            if ($line->[FIELD_SECTION] =~ m/^9000\s.\sInternational Sales$/) {
                $country = "";
                $linenum++;
                next;
            }

            if ($line->[FIELD_SUBSECTION] =~ m/^9\d\d\d\s.\s(.*)\sSales$/) {
                if ($1 eq 'South Africa') {
                    $country = 'ZA';
                } elsif ($1 eq 'Benelux') {
                    $country = 'BE';
                } elsif ($1 eq 'Italy') {
                    $country = 'IT';
                } elsif ($1 eq 'Japan') {
                    $country = 'JP';
                } elsif ($1 eq 'Australia & New Zealand') {
                    $country = 'AU';
                } elsif ($1 eq 'Singapore') {
                    $country = 'SG';
                }
                $linenum++;
                next;
            }

            my $prodtype    = RPS::File::Sale::TYPE_PHYSICAL;
            my $price_level = RPS::File::Sale::PLEVEL_FULL;
            my $channel     = RPS::File::Sale::CHANNEL_RETAIL;
            my $outlet      = $line->[FIELD_OUTLET];
            my $vendorid    = $line->[FIELD_VENDORID];
            my $album       = $line->[FIELD_ALBUM + $hasmemo];

            my $country_tmp = "";
            if ($country eq "" && $hasmemo != 0) {
                my $cntry = $line->[FIELD_ALBUM];
                if ($cntry eq 'Thailand') {
                    $country_tmp = 'TH';
                } elsif ($cntry eq 'Tahialand') {  ## stupid mis-spelling
                    $country_tmp = 'TH';
                }
            }
    
            if ($line->[FIELD_DATE] !~ m/^\d+$/) {
                $linenum++;
                next;
            }
    
            my ($dateBegin, $dateEnd) = 
            $self->_getDates(date_begin=>$line->[FIELD_DATE], type=>"msft");
    
            unless ($dateBegin && $dateEnd) {
                $self->errstr("couldn't get dates from ".$line->[FIELD_DATE]);
                return undef;
            }
    
    
            my ($units)		= $line->[FIELD_UNITS + $hasmemo] =~ m/^(-?\d+)$/;
            my ($price) 	= $line->[FIELD_PRICE + $hasmemo] =~ m/^(-?\d*\.?\d*)$/;
    
            if ($prodtype && ($country || $country_tmp) && $units && $price && $album)
            {
                my $sale = RPS::Import::SaleRec->new();
        
                $sale->productType($prodtype);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->albumName($album);
                $sale->serviceProductID($vendorid);
                $sale->outlet($outlet);
                $sale->sales($units);
                $sale->salesRevenue($price);
                $sale->totalRevenue($price);
                $sale->priceLevel($price_level);
                $sale->channel($channel);
                if ($country ne "") {
                    $sale->countryCode($country);
                } else {
                    $sale->countryCode($country_tmp);
                }
                $sale->lineNum($linenum);
    
                ##$args{dumper}($sale);  ## for cmd-line testing
                $self->_insertSale(sale => $sale);
            } else {
                print STDERR "skipped $country / $linenum / $album / $outlet\n";
            }
            $linenum++;
        }
    }

	return $linenum;
}

#
# Private methods
#


#sub _getDates
#{
#	my $self = shift;
#	my $date = shift;

#    my ($year, $month, $day) = Add_Delta_Days(1900,1,1, $date);
#    my $salesDate = sprintf("%04d-%02d-%02d", $year, $month, $day);

#	return ($salesDate, $salesDate);
#}

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