package RPS::Import::NewDay::v1;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::Import::ServiceMap;

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

sub physical { 1 }

sub _fieldMapExtended {
    {
        physical => {
            option1 => {
                labelName      => 'F',
                countryCode    => 'M',
                dateBegin      => 'B',
                dateEnd        => 'B',
                productType    => 'H',
                artistName     => 'E',
                upc            => 'G',
                albumName      => 'D',
                retailPrice    => 'J',
                totalRevenue   => 'L',
                mediaType      => 'H',
            },
        },
    };
}

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

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

sub currencyCode  { 'USD' }
sub serviceID     { Client::Service::DSP_NEW_DAY }
sub channel       { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel    { RPS::File::Sale::PLEVEL_UNKNOWN }

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('productType') || '';

    unless ( $type ) {
        my $albumName = $self->_getByFieldName('albumName') || '';
        ($type) = $albumName =~ /^\((\w+)\)/;
    }

    if ( $type =~ /^(?:002|CD)$/i ) {
        return RPS::File::Sale::TYPE_CD;
    } elsif ( $type =~ /^005-0?1$/i ) {
        return RPS::File::Sale::TYPE_DVD;
    } elsif ( $type =~ /^(?:011|LP)$/i ) {
        return RPS::File::Sale::TYPE_LP;
    }

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

sub countryCode {
    my $self = shift;

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

    $self->fail("Unable to determine country code from '$country'");
}

sub mediaType {
    my $self = shift;

    my $type = $self->_getByFieldName('mediaType') || '';

    unless ( $type ) {
        my $albumName = $self->_getByFieldName('albumName') || '';
        ($type) = $albumName =~ /^\((\w+)\)/;
    }

    if ( $type =~ /^(?:002|011|CD|LP)$/ ) {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    } elsif ( $type =~ /^005-0?1$/ ) {
        return RPS::DB::Item::MediaType::kMediaTypeVideo;
    }

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

sub albumName {
    my $self = shift;

    my $name = $self->_getByFieldName('albumName') || '';
    $name =~ s/^(?:'?\(.+\)\s?)(.+)$/$1/;

    return $name;
}

sub wholesalePrice {
    my $self = shift;

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

# 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   { $_[0]->_getByFieldName('totalRevenue') || 0 }

sub _isValidSaleRecord {
    my $self = shift;

    return defined $self->netUnits && $self->_getByFieldName('albumName');
}


1;
