package RPS::Import::PocketGroup3;

use strict;


use Date::Calc qw(Days_in_Month Add_Delta_Days Decode_Month);

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

use lib '/app/tools/rps/lib';
use RPS::File::Sale;
use RPS::DB::Item::MediaType;

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

# map version num to the field order
my %fieldMap =
(
	3 => {
		artist      => 1,
		title       => 2,
		date        => 3,
		units       => 8,
		price       => 14,
        currency    => 14, #header		
		isrc        => 15,	
	},
	4 => {
		artist      => 1,
		title       => 2,
		date        => 3,
		units       => 8,
		price       => 14,
        currency    => 14, #header		
		isrc        => 15,	
		upc         => 16,
		country     => 17,
	},			
);


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

#public methods

sub _importLines
{
	my $self = shift;
	my %args = @_;
    my $sheets = $args{sheets};
    my $sheet_names = $args{sheet_names};
	my $fileObj = $args{file};
	my $version = $fileObj->VersionNum;

    return undef unless ($sheets);

	my $offsets = $fieldMap{$version};
    my $linenum;

    for (my $sheet_i = 0; $sheet_i < @$sheets; $sheet_i++) {
        $linenum = 1;
        my $sheet = $sheets->[$sheet_i];
        my $sheet_name = $sheet_names->[$sheet_i];
        
        if ($sheet_name =~ /Wallpapers/) {
            next;
        }

        my $currency;

        foreach my $line (@$sheet) {

            my $artist      = $line->[$offsets->{artist}];
            my $isrc        = $line->[$offsets->{isrc}];
            my $title       = $line->[$offsets->{title}];
            my $units       = $line->[$offsets->{units}];
            my $price       = $line->[$offsets->{price}];                         
            my $upc         = $line->[$offsets->{upc}] if (defined $offsets->{upc});
                      
            my $country;    
            if (defined $offsets->{country})
            {
                my $countryName = $line->[$offsets->{country}];
                my $countryCode = $Common::Consts::COUNTRY_CODE{lc $countryName};
                if ($countryCode)
                {
                    $country = $countryCode;
                } 
            }
            else
            {
                $country = 'GB';  
            }              
            
            if ($artist eq 'Artist')
            {
                my $currencyHeader = $line->[$offsets->{currency}];
                if ($currencyHeader =~ m/Content Owner Share \((\w{3})\)/i)
                {
                    $currency = $1;
                }
                unless (defined $currency) {
                    $self->errstr("couldn't get currency code from ".$line->[$offsets->{currency}]);
                    return undef;
                }                
            }
            
            my $format;
            my $mediaType = RPS::DB::Item::MediaType::kMediaTypeAudio;

            if ($sheet_name =~ /Ringback Tones/) {
                $format = RPS::File::Sale::FORMAT_RINGBACK;
            }
            elsif($sheet_name =~ /True Tones/) {
                $format = RPS::File::Sale::FORMAT_RINGTONE;
            } 
            elsif ($sheet_name =~ /Full Tracks/) {
                $format = RPS::File::Sale::FORMAT_DOWNLOAD;
            } 
            elsif ($sheet_name =~ /Videos/) {
                $format = RPS::File::Sale::FORMAT_DOWNLOAD; # was FORMAT_VIDEO (FB1324)
                $mediaType = RPS::DB::Item::MediaType::kMediaTypeVideo,
            }             
            else {
                $self->errstr("unknown format: $sheet_name");
                return undef;
            }
    
            my $prodtype = RPS::File::Sale::TYPE_TRACK;
    
            $price /= $units if($units>1);
    
            if ($units && $price && $title && $title !~ /item name/i && $format)
            {
                my ($dateBegin, $dateEnd) = $self->_getDates(date_begin => $line->[$offsets->{date}]);
                unless (defined $dateBegin && defined $dateEnd) {
                    $self->errstr("couldn't get dates from ".$line->[$offsets->{date}]);
                    return undef;
                }

                my $sale = RPS::Import::SaleRec->new();
    
                $sale->mediaType($mediaType);
                $sale->productType($prodtype);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->isrc($isrc);
                $sale->upc($upc);
                $sale->artistName($artist);
                $sale->trackName($title);
                $sale->formatType($format);
                $sale->units($units);
                $sale->price($price);
                $sale->countryCode($country);
                $sale->currencyCode($currency);
                $sale->lineNum($linenum);
    
                ##$args{dumper}($sale); ## for cmd-line testing
                $self->_insertSale(sale => $sale);
            } 
            $linenum++;
        }
    }

	return $linenum;
}


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