package RPS::Import::Audible;

use strict;

use Date::Calc qw(Days_in_Month);

use lib '/app/tools/common/lib';
use Common::Consts qw(%COUNTRY_TO_CODE);

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

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

use constant FIELD_PRODUCTID=> 1;
use constant FIELD_TITLE    => 2;
use constant FIELD_ARTIST   => 3;
use constant FIELD_UNITS    => 10;
use constant FIELD_ROYALTY  => 12;

my %delivery_formats = (
    'Download'              => RPS::File::Sale::FORMAT_DOWNLOAD,
    'Stream'                => RPS::File::Sale::FORMAT_STREAM,
    'Limited Download'      => RPS::File::Sale::FORMAT_DOWNLOAD,
    'Over the Air Download' => RPS::File::Sale::FORMAT_DOWNLOAD,
    'Ringtone'              => RPS::File::Sale::FORMAT_RINGTONE,
    'Ringback'              => RPS::File::Sale::FORMAT_RINGBACK,
    'Over the Air Download' => RPS::File::Sale::FORMAT_DOWNLOAD,
    'Burn'                  => RPS::File::Sale::FORMAT_DOWNLOAD,
    'Other'                 => RPS::File::Sale::FORMAT_STREAM,
    'Play'                  => RPS::File::Sale::FORMAT_STREAM,
    'Realtone'              => RPS::File::Sale::FORMAT_RINGTONE,
);

my @data_delivery_formats = ('Download','Stream','Burn','Limited Download','Other','Play');

my %date_ranges = (
    Q1  => {
        startDate   => '1-1',
        endDate     => '3-31',
    },
    Q2  => {
        startDate   => '4-1',
        endDate     => '6-30',
    },
    Q3  => {
        startDate   => '7-1',
        endDate     => '9-30',
    },
    Q4  => {
        startDate   => '10-1',
        endDate     => '12-31',
    },
);


#
# public methods
#

sub _importLines
{
    my $self = shift;
    my %args = @_;
    my $lines = $args{lines};
    return undef unless ($lines);
    #my $version = $args{version}; # cmd-line testing
    my $version = $args{file}->VersionNum();
    #my $fileName = $args{OrigFileName}; # cmd-line testing
    my $fileName = $args{file}->OrigFileName();
    my $sheet_names = $args{sheet_names};
    my $linenum = 1;
    my $format = RPS::File::Sale::FORMAT_DOWNLOAD;
    my $sheet_count = 0;
    my $was_album_title = 0;
    my (%errors,$passed_format,$album,$dateBegin,$dateEnd,$total_columns,$fee_percentage,$x,$y);
    my ($artist,$title,$price,$units,$sale,$product_id);
    my $country = "united states";

    ($dateBegin, $dateEnd) = _get_dates($fileName);
    unless ($dateBegin && $dateEnd)
    {
        $self->errstr("couldn't get dates");
        print STDERR "file name: $fileName\n";
        return undef;
    }
    foreach my $sheet(@{ $args{sheets} }) {
        my $linenum = 1;
        foreach my $line (@$sheet)
        {
            $product_id  = $line->[FIELD_PRODUCTID];
            $artist      = $line->[FIELD_ARTIST];
            $title       = $line->[FIELD_TITLE];
            $units       = $line->[FIELD_UNITS];
            $units =~ s/\D//g;
            if($artist ne "" && $artist ne "Author Name" && $artist ne "Total" && $units>0 && $line->[FIELD_ROYALTY]>0) {
                $price       = sprintf("%.8f",($line->[FIELD_ROYALTY]/$units));
                $sale    = RPS::Import::SaleRec->new();
                #$sale->productType(RPS::File::Sale::TYPE_ALBUM);
                $sale->productType(RPS::File::Sale::TYPE_TRACK);
                $sale->clientProductID($product_id);
                $sale->trackName($title);
                $sale->formatType($format);
                $sale->dateBegin($dateBegin);
                $sale->dateEnd($dateEnd);
                $sale->artistName($artist);
                $sale->price($price);
                $sale->units($units);
                $sale->countryCode($sheet_names->[$sheet_count]);
                $sale->lineNum($linenum);
                #$args{dumper}($sale); ## for cmd-line testing
                $self->_insertSale(sale => $sale);
            }
            else {
                #print STDERR "SKIP => a: ". $artist . " u: ". $units . " t: " . $title . " p: " . $price . "\n";
            }
            $linenum++;
        }
        $sheet_count++;
    }
    return $linenum;
}

#
# Private methods
#

sub _get_dates
{
    my $passed_date = shift;
    return undef unless ($passed_date =~ m/Q(\d) (\d{4}) /);
    my ($month, $year) = ($1, $2);
    return ($2 . "-" . $date_ranges{"Q".$1}{startDate},$2 . "-" . $date_ranges{"Q".$1}{endDate});
}

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