package RPS::Import::BMG::v3;

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 { 1 }

sub _fieldMapExtended {
    {
        physical => {
            option1 => {
                countryCode    => 'H',
                dateBegin      => 'J',
                dateEnd        => 'J',
                productType    => 'O',
                artistName     => 'G',
                albumName      => 'F',
                priceLevel     => 'N',
                currencyCode   => 'AA',
                wholesalePrice => 'R',
                totalRevenue   => 'Z',
                mediaType      => 'O',
            },
         },
    };
}

sub _unverifiedFieldMapExtended {
    {
        physical => {
            option1 => {
                _netUnits => 'Y',
            },
        },
    };
}

sub _headerIdentifierExtended {
    {
        physical => {
            option1 => {
                productType => 'CONFIGURATION',
            },
        },
    };
}

sub serviceID { Client::Service::DSP_BMG }
sub channel   { RPS::File::Sale::CHANNEL_RETAIL }

sub currencyCode {
    my $self = shift;

    my $cc = $self->_getByFieldName("currencyCode") || '';
    return 'USD' if $cc =~ /^US Dollars$/i
}

sub countryCode {
    my $self = shift;

    my $name = $self->_getByFieldName('countryCode') || '';
    my $country = Common::Country->Get($name);
    return $country->alpha2() if $country;

    return $name;
}

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 =~ /^(?:BOX|LP)$/i;

    $self->fail("Unbale to determine product_type from: '$type'.");
}

sub priceLevel {
    my $self = shift;

    my $priceLevel = $self->_getByFieldName("priceLevel") || '';
    return RPS::File::Sale::PLEVEL_FULL if $priceLevel =~ /^FP$/i;
}

sub mediaType {
    my $self = shift;

    my $type = $self->_getByFieldName("mediaType") || '';
    return RPS::DB::Item::MediaType::kMediaTypeAudio if $type =~ /^(?:BOX|LP|CD)$/i;
}

sub wholesalePrice {
    my $self = shift;

    my $price = $self->_getByFieldName("wholesalePrice") || 0;
    $price =~ s/,//g;

    return $price;
}

# physical
sub netUnits       { $_[0]->_getByFieldName('_netUnits') || 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 totalRevenue {
    my $self = shift;

    my $revenue = $self->_getByFieldName('totalRevenue') || 0;
    $revenue =~ s/,//g;

    return $revenue;
}

sub _isValidSaleRecord {
    my $self = shift;

    return $self->netUnits && $self->totalRevenue;
}


1;
