package RPS::Import::Caroline::v21;

use strict;
use warnings;

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

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        21 => {
            labelName      => 'A',
            countryCode    => 'J',
            dateBegin      => 'K',
            dateEnd        => 'K',
            productType    => 'F', # configuration
            artistName     => 'C',
            upc            => 'G',
            albumName      => 'D',
            retail         => 'O',
            sales          => 'L',
            salesRevenue   => 'R',
            returns        => 'M',
            returnsRevenue => 'U',
            units          => 'N',
            totalRevenue   => 'AD',
        },
    );

    return $fieldMap{ $self->_version };
}

sub _unverifiedFieldMap {
    my $self = shift;

    my %fieldMap = (
        21 => {
            discount => 'X',
            dist_fee => 'AB',
        },
    );

    return $fieldMap{ $self->_version };
}

sub physical          { 1 }
sub currencyCode      { 'EUR' }
sub _headerIdentifier { units => 'Net Units' }
sub channel           { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel        { RPS::File::Sale::PLEVEL_UNKNOWN }

sub wholesalePrice {
    my $self = shift;

    my $retailPrice = $self->_getByFieldName('retail')   || 0;
    my $discount    = $self->_getByFieldName('discount') || 0;

    return sprintf "%.8f", $retailPrice * ( 1 - $discount );
}

sub saleDates {
    my $self = shift;

    my $startDate = $self->_getDateBegin();
    my $endDate   = $self->_getDateEnd();

    return $self->_getDates( date_begin => $startDate, date_end => $endDate );
}

sub countryCode {
    my $self = shift;

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

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

sub productType {
    my $self = shift;

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

    if ( $type =~ /^cd$/i ) {
        return RPS::File::Sale::TYPE_CD;
    }
    elsif ( $type =~ /^vinyl$/i ) {
        return RPS::File::Sale::TYPE_LP;
    }

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

sub sales {
    my $self = shift;

    my $sales = $self->_getByFieldName('sales') || 0;
    return $sales > 0 ? $sales : 0;
}

sub salesRevenue {
    my $self = shift;

    my $salesRevenue = $self->_getByFieldName('salesRevenue') || 0;
    my $distFee      = $self->_getByFieldName('dist_fee')     || 0;

    $salesRevenue = sprintf "%.8f", $salesRevenue * (1 - $distFee);
    return $salesRevenue > 0 ? $salesRevenue : 0;
}

sub returns {
    my $self = shift;

    my $returns = $self->_getByFieldName('returns') || 0;
    return $returns < 0 ? abs($returns) : 0;
}

sub returnsRevenue {
    my $self = shift;

    my $returnsRevenue = $self->_getByFieldName('returnsRevenue') || 0;
    my $distFee        = $self->_getByFieldName('dist_fee')       || 0;

    $returnsRevenue = sprintf "%.8f", $returnsRevenue * (1 - $distFee);
    return $returnsRevenue < 0 ? abs($returnsRevenue) : 0;
}


1;
