package RPS::Import::WMG::WarnerMobile4;

use strict;
use warnings;

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

use base 'RPS::Import::MapFaceBase';
use base 'RPS::Import::WMG::WarnerMobile2';

sub _fieldMap {
    my $self = shift;

    my %_fieldMap = (
        4 => {
            dateBegin   => 'E',
            dateEnd     => 'F',
            productType => 'L',
            artistName  => 'G',
            upc         => 'I',
            isrc        => 'I',
            albumName   => 'H',
            trackName   => 'H',
            units       => 'AB',
            price       => 'AD',
        },
        5 => {
            dateBegin   => 'E',
            dateEnd     => 'F',
            productType => 'L',
            artistName  => 'G',
            upc         => 'I',
            isrc        => 'I',
            albumName   => 'H',
            trackName   => 'H',
            units       => 'AF',
            price       => 'AH',
        },
        8 => {
            dateBegin   => 'C',
            dateEnd     => 'D',
            productType => 'J',
            artistName  => 'E',
            upc         => 'G',
            isrc        => 'G',
            albumName   => 'F',
            trackName   => 'F',
            units       => 'AC',
            price       => 'AD',
        }
    );

    return $_fieldMap{ $self->version };
}

sub _unverifiedFieldMap {
    my $self = shift;

    my %_fieldMap = (
        4 => {
            service   => 'A',
            mediaCode => 'K',
            modelType => 'W',
        },
        5 => {
            service   => 'A',
            retailer  => 'C',
            mediaCode => 'K',
            modelType => 'Z',
        },
        8 => {
            service   => 'A',
            retailer  => 'B',
            mediaCode => 'I',
            modelType => 'W',
        },
    );

    return $_fieldMap{ $self->version };
}

sub serviceID {
    my $self = shift;

    my $service  = $self->_getByFieldName('service')  || "";
    my $retailer = $self->_getByFieldName('retailer') || "";

    if ( $service =~ /^Apple Inc$/i ) {
        return Client::Service::DSP_ITUNES_CLOUD if $retailer =~ /^Apple iCloud$/i;
        return Client::Service::DSP_APPLE_MUSIC  if $retailer =~ /^Apple Music$/i;
        return Client::Service::DSP_ITUNES       if $retailer =~ /^Apple Inc$/i;
    }

    return Client::Service::DSP_YOUTUBE_RED   if $retailer =~ /^youtube red$/i;
    return Client::Service::DSP_YOUTUBE       if $service =~ /^youtube$/i;
    return Client::Service::DSP_SOUNDEXCHANGE if $service =~ /^Sound Exchange$/i;

    if ( $self->version == 5 ) {
        return $self->handleError( "Unknown service: '$service, $retailer'", RPS::DB::Item::SaleImportError::kErrorService );
    }

    return $self->SUPER::serviceID();
}

sub price {
    my $self = shift;

    my $price = $self->_getByFieldName('price') || 0;
    return sprintf "%.8f", $price;
}

sub units {
    my $self = shift;

    my $units = $self->_getByFieldName('units') || 0;
    my $price = $self->price();

    unless ($units) {
        $units = $price <=> 0;
    }

    $units = $price < 0 ? -1 * abs($units) : abs($units);

    return $units;
}

sub _isValidSaleRecord {
    my $self    = shift;

    my $units = $self->_getByFieldName('units') || '';
    return if $units =~ /^\Variance$/;
    return if $self->units == 0 && $self->price == 0;
    return $self->_getByFieldName('service') && $self->_getByFieldName("artistName");

}

sub formatType {
    my $self = shift;

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

    if ( $self->version == 5 ) {
        my $retailer = $self->_getByFieldName('retailer') || '';
        return RPS::File::Sale::FORMAT_PERFORMANCE if $retailer =~ /^Sound Exchange DMCA NonRoyalty$/i;
        return RPS::File::Sale::FORMAT_EPHEMERAL   if $retailer =~ /^Sound Exchange DMCA Ephemeral$/i;
    }

    return $self->SUPER::formatType();
}

# MapFace
sub _mapFaceServiceID   { 'service', 'retailer' }
sub _mapFaceCountryCode {}
sub _mapFaceProductType {}
sub _mapFaceFormatType  {}
sub _mapFaceMediaType   {}


1;
