package RPS::Import::Red3;

use strict;

use Date::Calc qw(Days_in_Month Decode_Month);

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

sub _fieldMap {
    {
        type            => 'E',
        configuration   => 'E',
        artistName      => 'C',
        clientProductID => 'G',
        upc             => 'F',
        albumName       => 'D',
        sales           => 'I',
        salesRevenue    => 'J',
        returns         => 'K',
        returnsRevenue  => 'L',
        totalRevenue    => 'N',
    };
}

sub _headerIdentifier { ( upc => 'UPC' ) }

sub _isValidSaleRecord {
    my $self = shift;
    return $self->albumName && ( $self->salesRevenue || $self->returnsRevenue );
}

sub channel      { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel   { RPS::File::Sale::PLEVEL_UNKNOWN }
sub currencyCode { 'USD' }
sub physical     { 1 }

sub _productTypes {
    {
        '16' => {
            productType => RPS::File::Sale::TYPE_LP,
        },
        '31' => {
            productType => RPS::File::Sale::TYPE_CD,
        },
    };
}

sub countryCode {
    my $self = shift;
    my ($countryCode) = $self->filename =~ /RED[-\s](CA)(?:n|nada)?/i;    # CA, CAN or CANADA
    return $countryCode;
}

sub _getDateBegin {
    my $self = shift;
    my $dateBegin;
    if ( $self->filename =~
m/(sep(?:tember)?|oct(?:ober)?|nov(?:ember)?|dec(?:ember)?|jan(?:uary)?|feb(?:ruary)?|mar(?:ch)?|apr(?:il)|may|jun(?:e)?|jul(?:y)?|aug(?:ust)?) (\d{4})/i
      ) {
        my $month = Decode_Month(sprintf "%s", $1);
        my $year  = $2;
        $dateBegin = sprintf( "%04d-%02d-%02d", $year, $month, 1 );
    }
    return $dateBegin;
}

sub returns {
    my $self    = shift;
    my $returns = $self->_getByFieldName('returns');
    return abs($returns);
}

sub returnsRevenue {
    my $self           = shift;
    my $returnsRevenue = $self->_getByFieldName('returnsRevenue');
    return abs($returnsRevenue);
}

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