package RPS::Import::Barden;

use strict;

use Date::Calc qw(Days_in_Month Decode_Month);

use lib '/app/tools/common/lib';
#use Common::Util;
use Common::Util qw(normalize_date normalize_isrc);
use Common::Consts qw(%COUNTRY_CODE);

use lib '/app/tools/data_classes/lib';
use Client::Service;

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

my %field_map = (
    1 =>
    {
        begin_date_tag_col => 0,
        begin_date_col => 1,
        end_date_col => 3,
        service_id => 0,
        artist  => 1,
        track   => 2,
        isrc    => 3,
        units   => 4,
        revenue => 5,        
    },
);

#public methods

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

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

    return undef unless ($lines);

    my $gross_total = 0;
    
    my $linenum = 0;
    my $sheetnum = 0;
        
    my $offsets = $field_map{$version};
    my %errors = ();
    
    #$canadian_dollar = 1 if($fileName =~ /^CAD_/);
    
    
    
 
    
        
    my ($dateBegin, $dateEnd);
    
    my $type = RPS::File::Sale::TYPE_TRACK;
    my $format;
    
    my $mediaType;

    if( $self->is_wmg )
    {
        $format = RPS::File::Sale::FORMAT_STREAM; # was FORMAT_VIDEOSTREAM (FB1324)
        $mediaType = RPS::DB::Item::MediaType::kMediaTypeVideo;
    }
    else
    {
        $format = RPS::File::Sale::FORMAT_STREAM;
        $mediaType = RPS::DB::Item::MediaType::kMediaTypeAudio;
    }
    
    
     foreach my $sheet (@sheets){     
       $sheetnum++;
       $linenum = 1;

    foreach my $line(@$sheet)
    {
        my $service_product_id = $line->[$offsets->{service_id}];
        my $artist = $line->[$offsets->{artist}];
        my $track = $line->[$offsets->{track}];
        my $isrc = normalize_isrc($line->[$offsets->{isrc}]);
        my $units = $line->[$offsets->{units}];
        my $revenue = $line->[$offsets->{revenue}];
        
        my $f_date_begin;
        my $f_date_end;
                
        if($line->[$offsets->{begin_date_tag_col}] eq "Begin Date"){
           $f_date_begin = $line->[$offsets->{begin_date_col}];
           $f_date_end   = $line->[$offsets->{end_date_col}];
           ($dateBegin, $dateEnd) = 
           $self->_getDates($f_date_begin, $f_date_end);
           
            unless ($dateBegin && $dateEnd) {
                $self->errstr("couldn't get dates from $f_date_begin, $f_date_end sheet: $sheetnum at row $linenum ");
                print STDERR "$fileName\n";
                return undef;
            }
        }
        
        if($service_product_id && $service_product_id =~ /\d+/ && $artist && 
        $track && $units && $revenue) 
        {           
            
            my $price = ($revenue / $units) if($units > 0);
            
            my $sale = RPS::Import::SaleRec->new();

            $sale->serviceProductID($service_product_id);           
            $sale->productType($type);
            $sale->formatType($format);
            $sale->mediaType($mediaType);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->isrc($isrc) if ($isrc);
            $sale->artistName($artist);
            $sale->trackName($track);
            $sale->units($units);
            $sale->price($price);
            $sale->lineNum($linenum);
            
            #$args{dumper}($sale);  ## for cmd-line testing
            $self->_insertSale(sale => $sale);
        }
        
        $linenum++;
    }
    }

    return $linenum;
}

#
# Private methods
#


sub _getDates
{
    my $self       = shift;
    my $date_begin = shift;
    my $date_end   = shift;
    
   $date_begin =~ /(\d+)\/(\d+)\/(\d+)/;
   
   my $year = $3;
   
    if($year < 2000){
        $year += 2000;
   }
   
   my ($begin_month, $begin_day, $begin_year) = ($1, $2, $year);
   
   #print STDERR "Passed date begin: $date_begin date end: $date_end\n";
     
   $date_end   =~ /(\d+)\/(\d+)\/(\d+)/;
   
   $year = $3;
   
   if($year < 2000){
        $year += 2000;
   }
   
   my ($end_month, $end_day, $end_year) = ($1, $2, $year);
   
   #print STDERR "End month $end_month end day $end_day ".
   "end year $end_year begin month $begin_month begin day $begin_day begin year $begin_year\n";
   
   if(!($end_month && $end_day && $end_year && 
   $begin_month && $begin_day && $begin_year)){
        return undef;
   }
       
    my $dateBegin = sprintf("%04d-%02d-%02d", $begin_year, $begin_month, $begin_day);
    my $dateEnd   = sprintf("%04d-%02d-%02d", $end_year, $end_month, $end_day);
    
    return ($dateBegin, $dateEnd);    
    
}

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