package RPS::Import::DJTunes;

#Created from specs in Fog Bugz Case 9654

use strict;

use Data::Dumper;

use lib '/app/tools/common/lib';
#use Common::Util;
use Common::Util qw(normalize_date normalize_isrc);
use Common::Consts qw(%COUNTRY_CODE %CODE_TO_COUNTRY);

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

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

my %field_map = (
    1 =>
    {
        date_begin         => 3,
        country            => 6,
        format             => 7,
        product_type       => 9,
        units              => 10,
        upc                => 11,
        isrc               => 12,
        artist             => 13,
    },
    2 =>
    {
        channel            => 1,
        date_begin         => 4,
        country            => 6,
        format             => 7,
        product_type       => 9,
        upc                => 11,
        isrc               => 12,
        artist             => 13,
        title              => 14,
        label              => 15,
        price              => 20,
        currency_code      => 21,
    },
);

my %product_type_map = ("track"  => RPS::File::Sale::TYPE_TRACK,
                        "bundle" => RPS::File::Sale::TYPE_ALBUM);

my %format_map    = ("download"  => RPS::File::Sale::FORMAT_DOWNLOAD,);
my $media_type    = RPS::DB::Item::MediaType::kMediaTypeAudio;
my $currency_code = "EUR";



#public methods

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

    my $lines = $args{lines};
    my $version = $args{file}->VersionNum();
    my $fileName = $args{file}->OrigFileName();
    my @sheets = @{ $args{sheets} };

    return undef unless ($lines);

    my $linenum = 1;

    my $offsets = $field_map{$version};
    my %errors = ();

    $linenum = 1;

    foreach my $line(@$lines)
    {
        my $sale = RPS::Import::SaleRec->new();

        my $country            = uc $line->[$offsets->{country}];
        my $f_date_begin       = lc $line->[$offsets->{date_begin}];
        my $f_format           = lc $line->[$offsets->{format}];
        my $f_product_type     = lc $line->[$offsets->{product_type}];
        my $f_upc              = $line->[$offsets->{upc}];
        my $isrc               = $line->[$offsets->{isrc}];
        my $artist             = $line->[$offsets->{artist}];
        my $f_title            = $line->[$offsets->{title}];
        my $label              = $line->[$offsets->{label}];

        my ($upc1, $upc2) = split(" ", $f_upc);

        my $upc = $upc1;

        $upc =~ s/[^0-9]//g;
        $isrc = normalize_isrc($isrc);

        my $product_type = $product_type_map{$f_product_type};
        my $format       = $format_map{$f_format};

        my $album;
        my $track;

        if($product_type eq RPS::File::Sale::TYPE_TRACK){
            $track = $f_title;
        }
        elsif($product_type eq RPS::File::Sale::TYPE_ALBUM){
            $album = $f_title;
        }

        my ($date_begin, $date_end) = $self->_getDates(date_begin=>$f_date_begin, type=>"iso");

        if( $version == 2 ) {
            $self->_importLinesV2( offsets => $offsets, line => $line, sale => $sale );
        } elsif( $version == 1 ) {
            $self->_importLinesV1( offsets => $offsets, line => $line, sale => $sale );
        }

        if($label && $country && $f_product_type && $f_format && $artist &&
           ($upc || $album || $isrc || $track) )
        {
            $sale->labelName($label);
            $sale->countryCode($country);
            $sale->productType($product_type);
            $sale->formatType($format);
            $sale->artistName($artist);
            $sale->upc($upc);
            $sale->dateBegin($date_begin);
            $sale->dateEnd($date_end);
            $sale->albumName($album) if($album);
            $sale->isrc($isrc) if($product_type eq RPS::File::Sale::TYPE_TRACK);
            $sale->trackName($track) if($product_type eq RPS::File::Sale::TYPE_TRACK);
            $sale->currencyCode($currency_code);
            $sale->mediaType($media_type);
            $sale->lineNum($linenum);

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

        $linenum++;

    }


    return $linenum;
}

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

    my $line = $args{line};
    my $sale = $args{sale};
    my $offsets = $args{offsets};

    my $units              = $line->[$offsets->{units}];
    my $f_price_part_1     = $line->[$offsets->{price_part_1}];
    my $f_price_part_2     = $line->[$offsets->{price_part_2}];

    my $price        = $f_price_part_1 + (.01 * $f_price_part_2);

    if(($units == 0) && ($price != 0)){

        if($price < 0){
            $sale->units(-1);
            $sale->price(abs $price);
            $self->_insertSale(sale => $sale);

            $sale->units(1);
            $sale->price(0);
            $self->_insertSale(sale => $sale);
        }
        elsif($price > 0){
            $sale->units(1);
            $sale->price($price);
            $self->_insertSale(sale => $sale);

            $sale->units(-1);
            $sale->price(0);
            $self->_insertSale(sale => $sale);
        }
    }
    else{

        if(($units > 0) && ($price > 0)){
            $price /= $units;
        }
        elsif(($units > 0) && ($price < 0)){
            $price = (abs $price)/$units;
            $units *= -1;
        }
        elsif(($units < 0) && ($price > 0)){
            $price = $price / (abs $units);
        }
        elsif(($units < 0) && ($price < 0)){
            $price = (abs $price) / (abs $units);
        }

        $sale->units($units);
        #$sale->free($free) if($free);
        #$sale->price($price) if(!$free);
        $sale->price($price);
    }
}

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

    my $line = $args{line};
    my $sale = $args{sale};
    my $offsets = $args{offsets};

    return undef unless ($line);

    my $country            = uc $line->[$offsets->{country}];
    my $units              = 1;
    my $price              = $line->[$offsets->{price}];
    my $currency           = $line->[$offsets->{currency_code}];
    $price =~ s/","/./;
    $price =~ s/,/./;

    my $unitPrice = $price / $units;
    $sale->units($units);
    $sale->price($unitPrice);
    $sale->countryCode($country);
    $sale->currencyCode($currency);
}

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