package RPS::Import::PrimalRecords;

use strict;


use Date::Calc qw(Days_in_Month Decode_Month);

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

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

my %field_map = (
   1 => {
          'product_id'  => 1,
          'track'       => 2,
          'label'       => 3,
          'price'       => 4,
				},												
  );


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 $retval = undef;
	my $lines = $args{lines};
	my $fileObj = $args{file};
	my $fileName = $fileObj->OrigFileName;
  my $version = $fileObj->VersionNum;

  return undef unless ($lines && $fileName && $version);

  my $offsets = $field_map{$version};

  my %errors = ();
	my $linenum = 1;
	
	my ($dateBegin, $dateEnd) = $self->_getDatesFromFileName($fileName);	
  unless (defined $dateBegin && defined $dateEnd) {
      print STDERR "Couldn't get dates from: ". $fileName . "\n";
      $self->errstr("couldn't get dates from: ". $fileName);
      return undef;
  }	

  my $providerFee;
  
	foreach my $line(@$lines)
	{
		
		if ($linenum == 1)
		{
			$providerFee = $line->[6];
			if ($providerFee =~ m/Provider \(@ (\d+)\%\)/)
			{
				$providerFee = $1 / 100;
			}
		}		
		

		my $format = RPS::File::Sale::FORMAT_DOWNLOAD;		
		my $prodtype = RPS::File::Sale::TYPE_TRACK;
		my $units = 1;
	  my $countryCode = 'US';
 	  my $currencyCode = 'USD';
 	  		
		my $track		= $line->[$offsets->{'track'}];
		my $label		= $line->[$offsets->{'label'}];
		my $serviceID	= $line->[$offsets->{'product_id'}];		
 	  my $price	= $line->[$offsets->{'price'}];
 	  
 	  $price *= $providerFee;
 	  
    if ($price)
    {
        $price = sprintf("%.8f", $price);
    } 	    

		if ($price && $track)
		{

      my $sale = RPS::Import::SaleRec->new();

			$sale->productType($prodtype);
			$sale->formatType($format);
			$sale->dateBegin($dateBegin);
			$sale->dateEnd($dateEnd);
			$sale->trackName($track);
			$sale->units($units);
			$sale->currencyCode($currencyCode);
			$sale->countryCode($countryCode);
			$sale->price($price);
			$sale->labelName($label);
			$sale->serviceProductID($serviceID);
			$sale->lineNum($linenum);

			$self->_insertSale(sale => $sale);
    } 
		$linenum++;
	}

	return $linenum;
}


#
# Private methods
#

my %month_map = (
    jan =>  1,
    feb =>  2,
    mar =>  3,
    apr =>  4,
    may =>  5,
    jun =>  6,
    jul =>  7,
    aug =>  8,
    sep =>  9,
    oct => 10,
    nov => 11,
    dec => 12,
);

sub _getDatesFromFileName {
	my $self  = shift;
	my $fname = shift;
	
	# let's make things simpler by getting rid of all whitespace
	#
	$fname =~ s/\s+//g;
	
  return unless ( $fname =~ m/^oseaostatement(\w{3})(\d{2})-(\w{3})(\d{2})/ );

  my $beginMonth = $month_map{$1};
  my $beginYear  = 2000 + $2;
  
  my $endMonth = $month_map{$3};
  my $endYear  = 2000 + $4;    

  my $month_end = Days_in_Month( $endYear, $endMonth );

  my $format    = '%4d-%02d-%02d';
  my $beginDate = sprintf( $format, $beginYear, $beginMonth, 1 );
  my $endDate   = sprintf( $format, $endYear, $endMonth, $month_end );

  return ($beginDate, $endDate);
}


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