package RPS::Import::Merlin::v69;

use strict;

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

use base qw/RPS::Import::MapFaceBase RPS::Import::Importer/;

sub _fieldMap {
    {
        labelName    => 'N',
        serviceID    => 'A',
        dateBegin    => 'C',
        dateBegin    => 'D',
        countryCode  => 'R',
        formatType   => 'Q',
        artistName   => 'J',
        upc          => 'F',
        albumName    => 'K',
        isrc         => 'E',
        trackName    => 'L',
        currencyCode => 'V1',
        units        => 'S',
        price        => 'V'
    };
}

sub _headerIdentifier { ( upc => 'UPC' ) }

sub mediaType         { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub currencyCode      { shift->{_currencyCode} }
sub productType       { RPS::File::Sale::TYPE_TRACK }
sub formatType        { RPS::File::Sale::FORMAT_STREAM }

sub _processHeader {
    my $self = shift;

    unless ( $self->{_currencyCode} ) {
        my $st = $self->_getByFieldName('currencyCode');
        if ( $st =~ /^total_payable_(\w{3})$/i ) {
            $self->{_currencyCode} = uc($1);
        }
    }
}

sub serviceID {
    my $self = shift;

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

    my $serviceID = $self->getServiceID( lc($service) ) || $RPS::Import::ServiceMap::SERVICE_ALIASES{ lc $service };

    $self->handleError("Unknown service: '$service'", RPS::DB::Item::SaleImportError::kErrorService ) unless ($serviceID);

    return $serviceID;
}

sub free {
    my $self = shift;

    my $format = $self->_getByFieldName("formatType") || "";
    my $price = $self->_getByFieldName("price") || 0;

    return 1 if ($format =~ /free/i and ($price == 0));
}

sub _isValidSaleRecord {
    my $self = shift;

    return unless ($self->price && $self->units);
    return $self->SUPER::_isValidSaleRecord();
}

sub _mapFaceProductType { }
sub _mapFaceServiceID   { 'serviceID' }
sub _mapFaceCountryCode { }
sub _mapFaceFormatType  { }
sub _mapFaceMediaType   { }

1;
