package RPS::Import::WMG::WarnerMobile7;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use RPS::File::Sale;

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

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        7 => {
            countryCode     => 'P',
            dateBegin       => 'AI',
            dateEnd         => 'AI',
            productType     => 'O',
            artistName      => 'F',
            clientProductID => 'G',
            albumName       => 'E',
            channel         => 'L',
            priceLevel      => 'V',
            retail          => 'AB',
            units           => 'AE',
            totalRevenue    => 'AG',
        },
    );

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

sub physical          { 1 }
sub currencyCode      { 'USD' }
sub _headerIdentifier { albumName => 'Product Title' }

sub saleDates {
    my $self = shift;

    my $period = $self->_getDateBegin() || '';

    my ($dateBegin, $dateEnd);
    if ( $period =~ /^(\d{4}) H1$/i ) {
        $dateBegin = sprintf "%04d-%02d-%02d", $1, 1, 1;
        $dateEnd   = sprintf "%04d-%02d-%02d", $1, 6, 30;
    }
    elsif ( $period =~ /^(\d{4}) H2$/i ) {
        $dateBegin = sprintf "%04d-%02d-%02d", $1, 7, 1;
        $dateEnd   = sprintf "%04d-%02d-%02d", $1, 12, 31;
    }

    return $self->_getDates( date_begin => $dateBegin, date_end => $dateEnd );
}

sub countryCode {
    my $self = shift;

    my $country = lc ($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-LP$/i ) {
        return RPS::File::Sale::TYPE_CD;
    }
    elsif ( $type =~ /^CD-S5$/i ) {
        return RPS::File::Sale::TYPE_CD_SIN;
    }
    elsif ( $type =~ /^V-LP$/i ) {
        return RPS::File::Sale::TYPE_LP;
    }

    $self->fail("Could not parse product type from '$type'");
}

sub channel {
    my $self = shift;

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

    if ( $channel =~ /^3RD|Cus|Export|Physical$/i ) {
        return RPS::File::Sale::CHANNEL_RETAIL;
    }
    elsif ( $channel =~ /^Club$/i ) {
        return RPS::File::Sale::CHANNEL_CLUB;
    }

    $self->fail("Could not parse channel type from '$channel'");
}

sub priceLevel {
    my $self = shift;

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

    if ( $level =~ /^BUD$/i ) {
        return RPS::File::Sale::PLEVEL_BUDGET;
    }
    elsif ( $level =~ /^FULL$/i ) {
        return RPS::File::Sale::PLEVEL_FULL;
    }
    elsif ( $level =~ /^MID$/i ) {
        return RPS::File::Sale::PLEVEL_MID;
    }

    $self->fail("Could not parse price level from '$level'");
}

sub sales {
    my $self = shift;

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

sub salesRevenue {
    my $self = shift;

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

sub returns {
    my $self = shift;

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

sub returnsRevenue {
    my $self = shift;

    my $revenue = $self->totalRevenue             || 0;
    my $sales   = $self->_getByFieldName('units') || 0;
    return $sales <= 0 && $revenue < 0 ? abs($revenue) : 0;
}


1;