package RPS::Import::YouTube2;

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 = (
    7 =>
    {
        header_col => 0,
        date_col => 1,        
        service_product_id => 1,
        track_ii => 2,
        units_i => 6,
        units_ii => 8,
        units_iii => 10,
        price => 13,
        isrc => 17,
        upc => 19,
        artist => 20,
        track_i => 21,
        album => 22,
        label => 23  
    },
);

#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} };
    
    my $track_url_start = "http://youtube.com/watch?v=";

    return undef unless ($lines);

    my $linenum = 1;
           
    my $offsets = $field_map{$version};
    my %errors = ();  
        
    my ($dateBegin, $dateEnd);
    
    my $type = RPS::File::Sale::TYPE_TRACK;
    my $format = RPS::File::Sale::FORMAT_STREAM; # was FORMAT_VIDEOSTREAM (FB1324)
    
    my $header;
    
    foreach my $line(@$lines)
    {
        my $service_product_id = $line->[$offsets->{service_product_id}];
        my $artist = $line->[$offsets->{artist}];
        my $track = $line->[$offsets->{track_i}];
        
        if(!$track){
            $track = $line->[$offsets->{track_ii}];
        }
        
        my $album = $line->[$offsets->{album}];
        my $isrc = normalize_isrc($line->[$offsets->{isrc}]);
        my $units = $line->[$offsets->{units_i}] + 
        $line->[$offsets->{units_ii}] + $line->[$offsets->{units_iii}];
        
        
        
        my $price = $line->[$offsets->{price}];
        my $label = $line->[$offsets->{label}];
        my $upc = $line->[$offsets->{upc}];
        
        $label =~ s/\(www.*\)//g;
        
        my $f_date_begin;
        my $f_date_end;
        
        if(!$dateBegin && 
        ($line->[$offsets->{date_col}] =~ /\d{4}\D\d{2}\D\d{2}/)){
            $dateBegin = $line->[$offsets->{date_col}];
        }
        elsif(!$dateEnd && 
        ($line->[$offsets->{date_col}] =~ /\d{4}\D\d{2}\D\d{2}/)){
            $dateEnd = $line->[$offsets->{date_col}];
        }
        
        if($line->[$offsets->{header_col}] =~ /#(.*)/){
            $header = $line->[$offsets->{header_col}];
            $linenum++;
            next;
        }
        
        
        if($service_product_id && $units =~ /\d+/ && $price =~ /\d+/ 
        && ($header =~ /commercial-share per video_id table/ || 
        $header =~ /ugc-share per video_id table/)) 
        {           
            $price = ($price / $units) if($units > 0);
            
            my $free = $price == 0 ? 1 : 0;
            
            if(!$track){
                $track = $track_url_start.$service_product_id;
            }
            
            my $sale = RPS::Import::SaleRec->new();

            $sale->serviceProductID($service_product_id);
            $sale->mediaType(2);           
            $sale->productType($type);
            $sale->formatType($format);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->isrc($isrc) if ($isrc);
            $sale->upc($upc) if ($upc);
            $sale->artistName($artist);
            $sale->trackName($track);
            $sale->albumName($album);
            $sale->labelName($label);
            $sale->units($units);
            $sale->price($price);
            $sale->free($free);
            $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.
###
