package RPS::Import::WMG::WarnerPhysical;

use strict;

use Date::Calc qw(Days_in_Month Decode_Month);

use lib '/app/tools/common/lib';
use Common::Consts qw(%CURRENCY_TO_COUNTRY);
use lib '/app/tools/data_classes/lib';

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

my %field_map = (
    1 =>
    {
        date_begin => 0,
        service_name => 1,
        product_type => 5,   
        service_id => 7,             
        artist => 9,
        album => 10,       
        gross_units => 12,
        returns => 13,
        net_units => 14,
        gross_revenue => 15,
        returns_revenue => 16,
        net_revenue => 17,
    },
);

my %productTypes =
(
    CD => RPS::File::Sale::TYPE_CD,
    BD => RPS::File::Sale::TYPE_BLURAY,
    DV => RPS::File::Sale::TYPE_DVD,
    A => RPS::File::Sale::TYPE_CD,
    CX => RPS::File::Sale::TYPE_DVD_CD_SET,
    MS => RPS::File::Sale::TYPE_LP,
);


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

    my $lines = $args{lines};
    my $version = $args{file}->VersionNum();
    my $fileName = $args{file}->OrigFileName();
    my $fileObj = $args{file};
    $fileObj->Physical(1);
    my @sheets = @{ $args{sheets} };

    return undef unless ($lines);

    my $linenum = 1;

    my $offsets = $field_map{$version};
    my %errors = ();

    my ($dateBegin, $dateEnd);

    foreach my $line(@$lines)
    {
        my $service_product_id = $line->[$offsets->{service_id}];
        my $serviceName = $line->[$offsets->{service_name}];
        my $artist = $line->[$offsets->{artist}];
        my $album = $line->[$offsets->{album}];
        my $grossUnits = $line->[$offsets->{gross_units}];
        my $grossRevenue = $line->[$offsets->{gross_revenue}];        
        my $netRevenue = $line->[$offsets->{net_revenue}];          
        my $f_date_begin = $line->[$offsets->{date_begin}];
        my $config = uc $line->[$offsets->{product_type}];
        my $type = $productTypes{$config} || '';
        
        my $returns = $line->[$offsets->{returns}];
        my $returnsRevenue = $line->[$offsets->{returns_revenue}];   
        
        my $serviceID = $self->getServiceID(lc ($serviceName)) || $RPS::Import::ServiceMap::SERVICE_ALIASES{ lc $serviceName };      
        
        
        # Now we need to strip out any formatting from numerical fields    
        $grossUnits =~ s/[\(\),-]//g if (defined $grossUnits);
        $grossRevenue =~ s/[\(\),]//g if (defined $grossRevenue);  
        $netRevenue =~ s/[\(\),]//g if (defined $netRevenue); 
        $returns =~ s/[\(\),-]//g if (defined $returns);
        $returnsRevenue =~ s/[\(\),-]//g if (defined $returnsRevenue);        
        
        if ($netRevenue eq '-0')
        {
            $netRevenue = 0;   
        }
        
        if ($grossRevenue eq '-0')
        {
            $grossRevenue = 0;   
        }      
        
        if ($grossRevenue < 0)
        {
            $returnsRevenue += ($grossRevenue * -1);   
            $grossRevenue = 0;            
        }  
        
        my $currency = 'USD';
        my $country = 'US';
        my $channel = RPS::File::Sale::CHANNEL_RETAIL;
        my $plevel  = RPS::File::Sale::PLEVEL_FULL;

        if($service_product_id && $artist && $album && $f_date_begin
        && $f_date_begin ne 'MONTH' && ($grossUnits || $returns))
        {
            ($dateBegin,$dateEnd) =
            $self->_getDates(date_begin=>$f_date_begin);

            unless ($dateBegin && $dateEnd) {
                $self->errstr("couldn't get dates from $f_date_begin: $linenum");
                print STDERR "couldn't get dates from $f_date_begin: $linenum";
                return undef;
            }
            
            unless ($type)
            {
                $self->errstr('Unknown format:' . $config);
                print STDERR "config: $config line: $linenum\n";
                return undef;
            }               
            
            unless ($serviceID)
            {
                $self->errstr("Couldn't find service ID for: ".$serviceName);
                print STDERR "Couldn't find service ID for: $serviceName\n";
                return undef;
            }     

            my $sale = RPS::Import::SaleRec->new();
            $sale->productType($type);
            $sale->mediaType(1);
            $sale->serviceID($serviceID);
            $sale->serviceProductID($service_product_id);
            $sale->artistName($artist);
            $sale->albumName($album);
            $sale->sales($grossUnits);
            $sale->salesRevenue($grossRevenue);
            $sale->returns($returns);
            $sale->returnsRevenue($returnsRevenue);            
            $sale->totalRevenue($netRevenue);
            $sale->currencyCode($currency);
            $sale->countryCode($country);
            $sale->priceLevel($plevel);
            $sale->channel($channel);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->lineNum($linenum);

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

        $linenum++;
    }


    return $linenum;
}


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