package RPS::Import::PocketGroup3;

use strict;

use Date::Calc qw(Days_in_Month Add_Delta_Days Decode_Month);

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

use lib '/app/tools/rps/lib';
use RPS::File::Sale;
use RPS::DB::Item::MediaType;

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

# map version num to the field order
my %fieldMap = (
    3 => {
        artist   => 1,
        title    => 2,
        date     => 3,
        units    => 8,
        price    => 14,
        currency => 14,    #header
        isrc     => 15,
    },
    4 => {
        artist   => 1,
        title    => 2,
        date     => 3,
        units    => 8,
        price    => 14,
        currency => 14,    #header
        isrc     => 15,
        upc      => 16,
        country  => 17,
    },
);

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 $sheets      = $args{sheets};
    my $sheet_names = $args{sheet_names};
    my $fileObj     = $args{file};
    my $version     = $fileObj->VersionNum;

    return undef unless ($sheets);

    my $offsets = $fieldMap{$version};
    my $linenum;

    for ( my $sheet_i = 0 ; $sheet_i < @$sheets ; $sheet_i++ ) {
        $linenum = 1;
        my $sheet      = $sheets->[$sheet_i];
        my $sheet_name = $sheet_names->[$sheet_i];

        if ( $sheet_name =~ /Wallpapers/ ) {
            next;
        }

        my $currency;

        foreach my $line (@$sheet) {

            my $artist = $line->[ $offsets->{artist} ];
            my $isrc   = $line->[ $offsets->{isrc} ];
            my $title  = $line->[ $offsets->{title} ];
            my $units  = $line->[ $offsets->{units} ];
            my $price  = $line->[ $offsets->{price} ];
            my $upc    = $line->[ $offsets->{upc} ] if ( defined $offsets->{upc} );

            my $country;
            if ( defined $offsets->{country} ) {
                my $countryName = $line->[ $offsets->{country} ];
                my $countryCode = $Common::Consts::COUNTRY_CODE{ lc $countryName };
                if ($countryCode) {
                    $country = $countryCode;
                }
            } else {
                $country = 'GB';
            }

            if ( $artist eq 'Artist' ) {
                my $currencyHeader = $line->[ $offsets->{currency} ];
                if ( $currencyHeader =~ m/Content Owner Share \((\w{3})\)/i ) {
                    $currency = $1;
                }
                unless ( defined $currency ) {
                    $self->errstr( "couldn't get currency code from " . $line->[ $offsets->{currency} ] );
                    return undef;
                }
            }

            my $format;
            my $mediaType = RPS::DB::Item::MediaType::kMediaTypeAudio;

            if ( $sheet_name =~ /Ringback Tones/ ) {
                $format = RPS::File::Sale::FORMAT_RINGBACK;
            } elsif ( $sheet_name =~ /True Tones/ ) {
                $format = RPS::File::Sale::FORMAT_RINGTONE;
            } elsif ( $sheet_name =~ /Full Tracks/ ) {
                $format = RPS::File::Sale::FORMAT_DOWNLOAD;
            } elsif ( $sheet_name =~ /Videos/ ) {
                $format    = RPS::File::Sale::FORMAT_DOWNLOAD;             # was FORMAT_VIDEO (FB1324)
                $mediaType = RPS::DB::Item::MediaType::kMediaTypeVideo,;
            } else {
                $self->errstr("unknown format: $sheet_name");
                return undef;
            }

            my $prodtype = RPS::File::Sale::TYPE_TRACK;

            $price /= $units if ( $units > 1 );

            if ( $units && $price && $title && $title !~ /item name/i && $format ) {
                my ( $dateBegin, $dateEnd ) = $self->_getDates( date_begin => $line->[ $offsets->{date} ] );
                unless ( defined $dateBegin && defined $dateEnd ) {
                    $self->errstr( "couldn't get dates from " . $line->[ $offsets->{date} ] );
                    return undef;
                }

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

                $sale->mediaType($mediaType);
                $sale->productType($prodtype);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->isrc($isrc);
                $sale->upc($upc);
                $sale->artistName($artist);
                $sale->trackName($title);
                $sale->formatType($format);
                $sale->units($units);
                $sale->price($price);
                $sale->countryCode($country);
                $sale->currencyCode($currency);
                $sale->lineNum($linenum);

                ##$args{dumper}($sale); ## for cmd-line testing
                $self->_insertSale( sale => $sale );
            }
            $linenum++;
        }
    }

    return $linenum;
}

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