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

package RPS::Import::Universal::v13;

use strict;

use lib '/app/tools/common/lib';
use Common::Assert;

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

sub _fieldMap {
    {
        dateBegin     	 => 'B',
        artistName       => 'Q',
        serviceProductID => 'D',
        albumName        => 'Q',
        sales            => 'E',
        salesRevenue     => 'H',
        returns          => 'I',
        returnsRevenue   => 'J',
        units            => 'K',
        totalRevenue     => 'L',                
	}
}


sub _headerIdentifier { ( serviceProductID => 'Catalog Number' ) }

sub currencyCode { 'CAD' }
sub countryCode  { 'CA' }
sub channel      { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel   { RPS::File::Sale::PLEVEL_FULL }
sub productType  { RPS::File::Sale::TYPE_CD }
sub physical     { 1 }


sub returns {
	my $self = shift;
	my $returns = $self->_getByFieldName( 'returns' );

  $returns *= -1;   
  
  return $returns; 	
}

sub returnsRevenue {
	my $self = shift;
	my $returnsRevenue = $self->_getByFieldName( 'returnsRevenue' );

  $returnsRevenue *= -1;   
  
  return $returnsRevenue; 	
}

sub artistName {
	my $self = shift;
	my $value = $self->_getByFieldName( 'artistName' );
	
	if ($value)
	{
  	if ($value =~ /^(.+)\/.+$/)
  	{
  		$self->{_artistName} = $1;
  	}
  }
	
  return $self->{_artistName};
}

sub albumName {
	my $self = shift;
	my $value = $self->_getByFieldName( 'albumName' );
	
	if ($value =~ /^.+\/(.+)$/)
	{
		$self->{_albumName} = $1;
	}
	
  return $self->{_albumName};
}

sub _getDateBegin {
        
    my $self = shift;
    my $dateBegin = $self->_getByFieldName('dateBegin') || return;  
       
    my $year = substr($dateBegin, 0, 4);
    my $month = substr($dateBegin, 4, 2); 
    
    $dateBegin = $year . "-" . $month . "-01";
    return $dateBegin;    
}


sub _isValidSaleRecord {
	my $self = shift;

	return ( ($self->sales || $self->returns) && $self->sales ne 'Gross Sales Units' && $self->dateBegin );
}


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

  my $lines = $args{lines};

  $self->{version} = $args{file}->VersionNum();
  $self->{filename} = $args{file}->OrigFileName();
  $self->{serviceID} = $args{file}->ServiceID();

  $self->{_linesImported} = 0;
  $self->{_linesIgnored}  = 0;

  return undef unless ($lines);

  $self->{sheetnum} = 0;
  
  $self->_validateFieldMap();
  
  foreach my $sheet(@{ $args{sheets} }) {
    $self->{sheetname} = $args{sheet_names}->[$self->{sheetnum}];
    $self->_processSheet( $sheet, $self->{sheetnum}++ );
    
    # !!! We really only want to process the first sheet.
    #
    last;
  }

  Common::Log::Print( "Import Complete.  Lines imported: $self->{_linesImported}, ignored: $self->{_linesIgnored}" );
}

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