package RPS::Import::SonyConnect;

use strict;


use Date::Calc qw(Decode_Month Days_in_Month);

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

use lib '/app/tools/data_classes/lib';

#private constants
use constant FIELD_DATEBEGIN	=> 1;
use constant FIELD_DATEEND		=> 2;
use constant FIELD_ISRC			=> 4;
use constant FIELD_UPC			=> 5;
use constant FIELD_ARTIST		=> 6;
use constant FIELD_TITLE		=> 7;
use constant FIELD_PRODTYPE		=> 8;
use constant FIELD_PRICE		=> 11;
use constant FIELD_UNITS		=> 12;

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

# map version number to data columns
my %fieldMap = ( 
				1 => {
						'dateBegin' 	=> 1,
						'dateEnd' 		=> 2,
						'isrc' 			=> 4,
						'upc' 			=> 5,
						'artist' 		=> 6,
						'title' 		=> 7,
						'productType' 	=> 8,
						'price' 		=> 11,
						'units' 		=> 12,
					},
				
				2 => {
						'dateBegin' 	=> 1,
						'dateEnd' 		=> 2,
						'isrc' 			=> 4,
						'upc' 			=> 5,
						'artist' 		=> 6,
						'album' 		=> 7,
						'title' 		=> 8,
						'productType' 	=> 9,
						'price' 		=> 12,
						'units' 		=> 13,
					},
				3 => {
						'dateBegin' 	=> 1,
						'dateEnd' 		=> 2,
						'isrc' 			=> 4,
						'upc' 			=> 5,
						'artist' 		=> 6,
						'album' 		=> 7,
						'title' 		=> 8,
						'productType' 	=> 9,
						'price' 		=> 12,
						'units' 		=> 13,
					}
				);

#public methods

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

	my $retval = undef;
	my $lines = $args{lines};
	my $fileObj = $args{file};
	my $version = $fileObj->VersionNum;


	if ($lines && $version)
	{
		my $offset;
		if(exists $fieldMap{$version})
		{
			$offset = $fieldMap{$version};
		}
		else
		{
            $self->errstr("wrong version");
			return undef;
		}

		my $linenum = 1;
		foreach my $line(@$lines)
		{
			if ($linenum > 1)
			{
				my $prodtype;
				if ($line->[$offset->{'productType'}] eq 'A')
				{
					$prodtype = RPS::File::Sale::TYPE_ALBUM;
				}
				elsif ($line->[$offset->{'productType'}] eq 'T')
				{
					$prodtype = RPS::File::Sale::TYPE_TRACK;
				}
				
				my $dateBegin	= $line->[$offset->{'dateBegin'}];
				my $dateEnd		= $line->[$offset->{'dateEnd'}];

				# dates can be tricky, check for "Nov 03, 2005" format
				if($dateBegin =~ /^(\w+)\s+(\d+),\s*(\d+)$/)
				{
					$dateBegin = join('/', Decode_Month($1), $2, $3);
				}
				if($dateEnd =~ /^(\w+)\s+(\d+),\s*(\d+)$/)
				{
					$dateEnd = join('/', Decode_Month($1), $2, $3);
				}
				$dateBegin	= Common::Util::normalize_date($dateBegin);
				$dateEnd	= Common::Util::normalize_date($dateEnd);

				my $format		= RPS::File::Sale::FORMAT_DOWNLOAD;
				my $upc			= Common::Util::normalize_upc($line->[$offset->{'upc'}]);
				my $isrc		= Common::Util::normalize_isrc($line->[$offset->{'isrc'}]);
				my ($artist, $title, $album, $track);

				if($version == 1)
				{
					$artist		= $line->[$offset->{'artist'}];
					$title		= $line->[$offset->{'title'}];

					if ($prodtype eq RPS::File::Sale::TYPE_ALBUM)
					{
						$album = $title;
					}
					elsif ($prodtype eq RPS::File::Sale::TYPE_TRACK)
					{
						$track = $title;
					}
				}
				elsif($version == 2 || $version == 3)
				{
					$artist     = $line->[$offset->{'artist'}];
					$album      = $line->[$offset->{'album'}];
					$title      = $line->[$offset->{'title'}];
					$track 		=  $title;
				}


				my ($units)		= $line->[$offset->{'units'}] =~ m/^(-?\d+)$/;
				my ($price)		= $line->[$offset->{'price'}] =~ m/^(\d*\.?\d*)$/;

				if ($prodtype && $dateBegin && $dateEnd && $units && $price && ($artist || $title))
				{
					my $sale = RPS::Import::SaleRec->new();

					$sale->productType($prodtype);
					$sale->formatType($format);
					$sale->dateBegin($dateBegin);
					$sale->dateEnd($dateEnd);
					$sale->upc($upc);
					$sale->isrc($isrc);
					$sale->artistName($artist);
					$sale->albumName($album);
					$sale->trackName($track);
					$sale->units($units);
					$sale->price($price);
					$sale->lineNum($linenum);
					$sale->countryCode('US');

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

	return $retval;
}


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