#---------------------------------------------------------------
# ____                   _ _         ____  _
#|  _ \ ___  _   _  __ _| | |_ _   _/ ___|| |__   __ _ _ __ ___
#| |_) / _ \| | | |/ _` | | __| | | \___ \| '_ \ / _` | '__/ _ \
#|  _ < (_) | |_| | (_| | | |_| |_| |___) | | | | (_| | | |  __/
#|_| \_\___/ \__, |\__,_|_|\__|\__, |____/|_| |_|\__,_|_|  \___|
#            |___/             |___/
#
# Copyright (C) 2013 RoyaltyShare, Inc.   All Rights Reserved
#---------------------------------------------------------------

package RPS::Import::iTunesRadio::v2;

use strict;

use Carp qw(croak);

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

sub _fieldMap {
    {

        labelName        => 'I',        
        countryCode      => 'J',
        dateBegin        => 'B1',
        dateEnd          => 'B2',        
        serviceProductID => 'F',
        artistName       => 'G',
        isrc             => 'A',
        trackName        => 'H',
        units            => 'D',
        currencyCode     => 'B',
    }
}

sub _unverifiedFieldMap {
    {      
        freeUnits     => 'E',
        footerLabel   => 'A', # footer area
        radioTotal    => 'B', # footer area
    }
}

sub _headerIdentifier { ( isrc => 'ISRC' ) }
sub formatType { RPS::File::Sale::FORMAT_STREAM }
sub mediaType { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub productType { RPS::File::Sale::TYPE_TRACK }
sub currencyCode  { shift->{_currencyCode} }

sub price {
    my $self = shift;
    return $self->units * $self->{_unitPrice};  # unitPrice determined from footer; see _preProcess
}

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

    Log->info( "Starting _preProcess" );
    $self->SUPER::_preProcess(%args);

    my $foundHeader;
    my $foundFooter;

    my $totalUnits = 0;
    my $numRows    = 0;

    my $linenum = 0;
    foreach my $line(@{ $args{lines} })
    {
        $self->{line} = $line;

        if( $foundFooter )
        {
            my $footerLabel = $self->_getByFieldName('footerLabel');
            if( $footerLabel =~ /radio total/i )
            {
                my $total = $self->_getByFieldName('radioTotal');
                $self->{_unitPrice} = $total / $totalUnits;
            }
            
            my $currencyCode = $self->_getByFieldName('currencyCode');
            if( $currencyCode =~ /^\w{3}$/ )
            {
                $self->{_currencyCode} = uc($currencyCode);
            }            
        }
        else
        {
            my $units = $self->_getByFieldName('units');
            my $isrc  = $self->_getByFieldName('isrc');

            if( $isrc =~ /Country Of Sale/i )
            {
                $foundFooter = 1;
            }
            else
            {
                if( $units )
                {
                    $totalUnits += $units;
                    $numRows++;
                }
            }

        }

        $linenum++;
    }

}


sub _saveLine {
    my $self = shift;

		# We may need to save two lines to the database for one line in the file.
		# One for paid units and one for free units.
		if ($self->units)
		{
			$self->SUPER::_saveLine();
		}

		my $freeUnits = $self->_getByFieldName('freeUnits');
		if ($freeUnits) 
		{
	    my ($startDate, $endDate) = $self->saleDates();
	
			my $unitPrice = 0;
	
	    my $sale = RPS::Import::SaleRec->new();
	
			# Here's what we need to change for these free units.
	    $sale->price( $unitPrice );
	    $sale->units( $freeUnits );
	    $sale->free( 1 );
	
	    $sale->dateBegin($startDate);
	    $sale->dateEnd($endDate);
	
			$sale->mediaType(           $self->mediaType);
	    $sale->productType(         $self->productType);
	    $sale->formatType(          $self->formatType);
	    $sale->albumName(           $self->albumName );
	    $sale->artistName(          $self->artistName );
	    $sale->averagePrice(        $self->averagePrice );
	    $sale->channel(             $self->channel );
	    $sale->clientProductID(     $self->clientProductID );
	    $sale->configuration(       $self->configuration );
	    $sale->conversionRate(      $self->conversionRate );
	    $sale->countryCode(         $self->countryCode );
	    $sale->currencyCode(        $self->currencyCode );	    
	    $sale->importStatus(        $self->importStatus );
	    $sale->isrc(                $self->isrc );
	    $sale->labelName(           $self->labelName );
	    $sale->outlet(              $self->outlet );
	    $sale->payoutType(          $self->payoutType );
	    $sale->wholesalePrice(      $self->wholesalePrice );
	    $sale->retailPrice(         $self->retailPrice );
	    $sale->priceLevel(          $self->priceLevel );
	    $sale->priceType(           $self->priceType );
	    $sale->retail(              $self->retail );
	    $sale->returns(             $self->returns );
	    $sale->returnsRevenue(      $self->returnsRevenue );
	    $sale->sales(               $self->sales );
	    $sale->salesRevenue(        $self->salesRevenue );
	    $sale->serviceID(           $self->serviceID );
	    $sale->serviceProductID(    $self->serviceProductID );
	    $sale->totalRevenue(        $self->totalRevenue );
	    $sale->trackName(           $self->trackName );
	    $sale->trackNum(            $self->trackNum );
	    $sale->upc(                 $self->upc );
	    $sale->wholesaleRate(       $self->wholesaleRate );
	    $sale->mcps_adjustment(     $self->mcps_adjustment );
	    $sale->comments(            $self->comments );
	
			$sale->lineNum( $self->linenum );
	
	    $self->_insertSale(sale => $sale);
		}
}

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