package RPS::Import::Sony::v34;

use strict;
use warnings;

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

sub _fieldMap {
    {
        dateBegin        => 'F8',
        dateEnd          => 'G8',
        countryCode      => 'I',
        productType      => 'D',
        artistName       => 'C',
        clientProductID  => 'A',
        albumName        => 'B',
        channel          => 'J',
        priceLevel       => 'K',
        wholesaleRate    => 'N',
        units            => 'O',
        totalRevenue     => 'T',
    };
}

sub physical          { 1 }
sub currencyCode      { 'AUD' }
sub _headerIdentifier { units => 'Units' }

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 longplay$/i ) {
        return RPS::File::Sale::TYPE_CD;
    }
    if ( $type =~ /^dvd video longplay$/i ) {
        return RPS::File::Sale::TYPE_DVD;
    }

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

sub channel {
    my $self = shift;

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

    if ( $channel =~ /^rtt$/i ) {
        return RPS::File::Sale::CHANNEL_RETAIL;
    }

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

sub priceLevel {
    my $self = shift;

    my $level = lc ($self->_getByFieldName('priceLevel') || '');
    $level =~ s/\s//g;

    my %levels = (
        unknown => RPS::File::Sale::PLEVEL_UNKNOWN,
        full    => RPS::File::Sale::PLEVEL_FULL,
        mid     => RPS::File::Sale::PLEVEL_MID,
        budget  => RPS::File::Sale::PLEVEL_BUDGET,
    );

    return exists $levels{$level} ? $levels{$level} : $levels{unknown};
}

sub sales {
    my $self = shift;
    my $sales = $self->_getByFieldName('units');

    return $sales > 0 ? $sales : 0;
}

sub salesRevenue {
    my $self = shift;
    my $salesRevenue = $self->_getByFieldName('totalRevenue');

    return $salesRevenue > 0 ? $salesRevenue : 0;
}

sub returns {
    my $self = shift;
    my $sales        = $self->_getByFieldName('units');
    my $salesRevenue = $self->_getByFieldName('totalRevenue');

    return $sales < 0 && $salesRevenue < 0 ? abs($sales) : 0;
}

sub returnsRevenue {
    my $self = shift;
    my $sales        = $self->_getByFieldName('units');
    my $salesRevenue = $self->_getByFieldName('totalRevenue');

    return $sales < 0 && $salesRevenue < 0 ? abs($salesRevenue) : 0;
}

sub _processSheet {
    my ($self, $sheet, $sheetnum) = @_;
    return unless $self->{sheetname} =~ /^sheet\s?1$/i;

    return $self->RPS::Import::Importer::_processSheet( $sheet, $sheetnum );
}


1;
