package RPS::Import::Sony::v38;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::Import::ServiceMap;
use Date::Calc qw(Days_in_Month Add_Delta_Days Decode_Month);

use parent 'RPS::Import::ImporterMixed';

sub physical { 2 }

sub _fieldMapExtended {
    {
        physical => {
            option1 => {
                labelName       => 'B',
                countryCode     => 'C',
                productType     => 'F',
                clientProductID => 'H',
                artistName      => 'G',
                upc             => 'I',
                albumName       => 'J',
                channel         => 'K',
                priceLevel      => 'L',
                wholesalePrice  => 'V',
                retailPrice     => 'W',
                sales           => 'X',
                salesRevenue    => 'Y',
                returns         => 'Z',
                returnsRevenue  => 'AA',
                totalRevenue    => 'AC',
            },
         },
    };
}

sub _unverifiedFieldMapExtended {
    {
        physical => {
            option1 => {
                _month    => 'E',
                _year     => 'D',
                _netUnits => 'AB',
            }
        }
    }
};

sub _headerIdentifierExtended {
    {
        physical => {
            option1 => {
                upc => 'UPC',
            },
        },
    };
}

sub currencyCode { 'CAD' }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub countryCode {
    my $self = shift;

    my $name = $self->_getByFieldName('countryCode') || '';
    my $oCountry = Common::Country->Get($name);
    return $oCountry ? $oCountry->alpha2 : undef ;
}

sub saleDates {
    my $self = shift;

    my $month = $self->_getByFieldName('_month') || '';
    my $year  = $self->_getByFieldName('_year')  || '';

    return $self->_getDates(
        date_begin => sprintf( "%04d-%02d-%02d", $year, $month, 1 ),
        date_end   => sprintf( "%04d-%02d-%02d", $year, $month, Days_in_Month($year, $month) ),
    ) if $month =~ /^\d{1,2}$/ && $year =~ /^\d{4}$/;
}

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('productType') || '';
    return RPS::File::Sale::TYPE_CD  if $type =~ /^CD$/i;
    return RPS::File::Sale::TYPE_LP  if $type =~ /^LP$/i;
    return RPS::File::Sale::TYPE_DVD if $type =~ /^DVD$/i;
}

sub priceLevel {
    my $self = shift;

    my $level = $self->_getByFieldName('priceLevel') || '';
    return RPS::File::Sale::PLEVEL_UNKNOWN if $level =~ /^$/i;
    return RPS::File::Sale::PLEVEL_FULL    if $level =~ /^full$/i;
    return RPS::File::Sale::PLEVEL_MID     if $level =~ /^mid$/i;
    return RPS::File::Sale::PLEVEL_BUDGET  if $level =~ /^budget$/i;
}

sub channel {
    my $self = shift;

    my $channel = $self->_getByFieldName('channel') || '';
    return RPS::File::Sale::CHANNEL_RETAIL if $channel =~ /^retail$/i;
    return RPS::File::Sale::CHANNEL_DIRECT if $channel =~ /^direct$/i;
}

sub netUnits           { $_[0]->_getByFieldName('_netUnits')    || 0 }
sub totalRevenue       { $_[0]->_getByFieldName('totalRevenue') || 0 }
sub sales              { $_[0]->netUnits     > 0 ? $_[0]->netUnits         : 0 }
sub salesRevenue       { $_[0]->totalRevenue > 0 ? $_[0]->totalRevenue     : 0 }
sub returns            { $_[0]->netUnits     < 0 ? abs $_[0]->netUnits     : 0 }
sub returnsRevenue     { $_[0]->totalRevenue < 0 ? abs $_[0]->totalRevenue : 0 }
sub _isValidSaleRecord {
    return ( $_[0]->_getByFieldName('artistName') || $_[0]->_getByFieldName('albumName') )
    && defined $_[0]->netUnits
}

1;
