package RPS::Import::DownloadCentric;

use strict;

use Date::Calc qw(Days_in_Month Decode_Month);

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

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

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

my %field_map = (
    1 => {
        album        => 3,
        upc          => 4,
        price        => 11,
        retail_price => 5,
        units        => 6,
    },
    2 => {
        album        => 3,
        upc          => 4,
        price        => 11,
        retail_price => 5,
        units        => 6,
    },
);

#public methods

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

    # This importer appears to be pulling the date from the filename not the data
    # Is this still correct?  last used 2008-05-06
    die "Importer no longer valid";

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

    my $offsets = $field_map{$version};

    my $dateBegin;
    my $dateEnd;
    $lines = $sheets->[1] if ( $version == 1 );
    $lines = $sheets->[2] if ( $version == 2 );
    $lines = $sheets->[0] if ( $version == 2 && $sheets->[1] eq "" && $sheets->[2] eq "" );
    ( $dateBegin, $dateEnd ) = $self->_getDates($fileName);

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

    my $linenum = 1;
    foreach my $line (@$lines) {
        my $album         = $line->[ $offsets->{'album'} ];
        my $artist        = $line->[ $offsets->{'artist'} ] if ( defined $offsets->{artist} );
        my $prodtype      = RPS::File::Sale::TYPE_CD;
        my ($sales)       = $line->[ $offsets->{'units'} ] =~ m/^(-?\d+)$/;
        my ($sales_price) = $line->[ $offsets->{'price'} ] =~ m/^(-?\d*\.?\d*)$/;
        my $upc           = $line->[ $offsets->{'upc'} ];
        my $retail_price  = $line->[ $offsets->{'retail_price'} ];
        my $total         = $sales_price;

        if ( $prodtype && $sales && $album && $album !~ /^name/i ) {
            my $sale = RPS::Import::SaleRec->new();

            $sale->productType($prodtype);
            $sale->dateBegin($dateBegin);
            $sale->dateEnd($dateEnd);
            $sale->artistName($artist) if ( defined $offsets->{artist} );
            $sale->albumName($album);
            $sale->upc($upc);
            if ( $sales > 0 ) {
                if ( $sales_price >= 0 ) {
                    $sale->sales($sales);

                    #                   $sales_price /= $sales;
                    $sale->salesRevenue($sales_price);
                } else {
                    $sale->returns($sales);
                    $sale->returnsRevenue( -1 * $sales_price );
                }
            } elsif ( $sales < 0 ) {
                $sales *= -1 if ( $sales < 0 );
                $sale->returns($sales);

                #                $sales_price /= ($sales*-1);
                $sale->returnsRevenue($sales_price);
            }
            $sale->channel(RPS::File::Sale::CHANNEL_RETAIL);
            $sale->retailPrice($retail_price);
            $sale->priceLevel(RPS::File::Sale::PLEVEL_FULL);
            $sale->totalRevenue($total);
            $sale->countryCode('US');
            $sale->lineNum($linenum);

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

        #else { print STDERR "skip l:".$linenum." p:".$prodtype." s:". $sales." a:".$album."\n"; }
        $linenum++;
    }
    return $linenum;
}

#
# Private methods
#

sub _getDates {
    my $self = shift;
    my $date = shift;
    my ( $dateBegin, $dateEnd );

    $date =~ m/(\d{4})\D(\d+)/;

    my $month = $2;
    my $year  = $1;

    $dateBegin = sprintf( "%04d-%02d-%02d", $year, $month, 1 );
    $dateEnd = sprintf( "%04d-%02d-%02d", $year, $month, Days_in_Month( $year, $month ) );

    return ( $dateBegin, $dateEnd );
}

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