package RPS::Import::MusicGiants;

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 lib '/app/tools/sale_import/lib';
use RPS::File::Sale;
use RPS::Import::Importer;
use base 'RPS::Import::Importer';

my %field_map = (
    1 => {
        product             => 0,
        upc                 => 1,
        isrc                => 3,
        artist              => 6, 
        title               => 7,
        units               => 8,
        date                => 9,
        price               => 12,
        country             => 13,
    },
);

my %product_type = (
    Album   => RPS::File::Sale::TYPE_ALBUM,
    Track   => RPS::File::Sale::TYPE_TRACK,
);

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

    my $lines = $args{lines};
    my $fileObj = $args{file};
    my $version = $fileObj->VersionNum;
    my $fileName = $args{file}->OrigFileName;

    return undef unless ($lines && $version);
    my $offsets = $field_map{$version};

    my $linenum = 1;
    foreach my $line (@$lines) {
        my $isrc                = Common::Util::normalize_isrc($line->[$offsets->{isrc}]);
        my $upc                 = Common::Util::normalize_upc($line->[$offsets->{upc}]);
        my $format              = RPS::File::Sale::FORMAT_DOWNLOAD;
        my $artist              = $line->[$offsets->{artist}];
        my $track               = $line->[$offsets->{title}];
        my ($units)             = $line->[$offsets->{units}] =~ m/^(\d+)$/;
        my $product_type        = $product_type{$line->[$offsets->{product}]};
        my $price               = $line->[$offsets->{price}];
        $price                  /= 100;

        if ($artist && $track && $units && $price) {
            my ($dateBegin,$dateEnd) = _getDates($line->[$offsets->{date}]);

            unless ($dateBegin && $dateEnd) {
                $self->errstr("can't get dates from $fileName");
                return undef;
            }

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

            $sale->productType($product_type);
            $sale->formatType($format);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->isrc($isrc);
            $sale->upc($upc);
            $sale->trackName($track) if($product_type eq RPS::File::Sale::TYPE_TRACK);
            $sale->albumName($track) if($product_type eq RPS::File::Sale::TYPE_ALBUM);
            $sale->artistName($artist);
            $sale->units($units);
            $sale->price($price);
            $sale->lineNum($linenum);
            $sale->countryCode('US');
            $sale->currencyCode('USD');

            $self->_insertSale(sale => $sale);
        } #else { print STDERR "skip l:".$linenum." s:".$serviceID." l:".$label." a:".$artist." t:".$track." u:".$units." i:".$isrc."\n"; }
        $linenum++;
    }
    return $linenum;
}


#
# Private methods
#

sub _getDates
{
    my $passed_date = shift;
    if($passed_date =~ m/2(\d{3})(\d\d)(\d\d)/) {
        my $year = "2".$1;
        my $month = $2;
        return ($year."-".$month."-01",$year."-".$month."-".Days_in_Month($year,$month));
    }
    return undef;
}

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