package RPS::Import::NaxosPhysical::v4;

use strict;

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

use base 'RPS::Import::Importer';

sub _fieldMap {
    {
        labelName       => 'A',
        productType     => 'C',
        clientProductID => 'C',
        artistName      => 'G',
        upc             => 'B',
        albumName       => 'F',
        sales           => 'H',
        salesRevenue    => 'K',
        returns         => 'I',
        returnsRevenue  => 'L',
        units           => 'J',
        totalRevenue    => 'M',
    };
}

sub _headerIdentifier {
    {
        upc => 'UPC',
    }
}

sub channel      { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel   { RPS::File::Sale::PLEVEL_UNKNOWN }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub currencyCode { 'USD' }

sub countryCode {
    my $self = shift;

    my $filename = $self->filename();

    if ( $filename =~ /sales(\w\w)/i ) {
        return $1;
    }

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

sub productType {
    my $self = shift;

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

    return RPS::File::Sale::TYPE_LP  if $type =~ /lp/i;
    return RPS::File::Sale::TYPE_DVD if $type =~ /dvd/i;

    return RPS::File::Sale::TYPE_CD;
}

sub saleDates {
    my $self = shift;

    my ( $startDate, $endDate );
    my $filename = $self->filename();

    if ( $filename =~ /[ _](\d{4})[ _](\d{2})/ ) {
        $startDate = sprintf( "%04d-%02d-%02d", $1, $2, 1 );
        $endDate = sprintf( "%04d-%02d-%02d", $1, $2, Days_in_Month( $1, $2 ) );
    }

    return ( $startDate, $endDate );
}

sub totalRevenue       { $_[0]->_getByFieldName('totalRevenue') || 0 }
sub sales              { abs( $_[0]->_getByFieldName('sales') || 0 ) }
sub salesRevenue       { $_[0]->totalRevenue > 0 ? $_[0]->totalRevenue : 0 }
sub returns            { abs( $_[0]->_getByFieldName('returns') || 0 ) }
sub returnsRevenue     { $_[0]->totalRevenue < 0 ? abs $_[0]->totalRevenue : 0 }

sub _isValidSaleRecord {
    return $_[0]->_getByFieldName('artistName') || $_[0]->_getByFieldName('albumName');
}

1;
