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