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.
###
