package RPS::Import::Merlin::v48;
# Merlin/iHeart Radio

use strict;
use warnings;

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

sub _fieldMap {
    my $self = shift;

    my %map = (
        48 => {
            labelName    => 'E',
            countryCode  => 'P',
            dateBegin    => 'A',
            dateEnd      => 'B',
            formatType   => 'S',
            artistName   => 'F',
            upc          => 'H',
            albumName    => 'G',
            isrc         => 'L',
            trackNum     => 'J',
            trackName    => 'K',
            units        => 'M',
            currencyCode => 'R',
            price        => 'Q',
        },
        52 => {
            labelName    => 'E',
            countryCode  => 'P',
            dateBegin    => 'A',
            dateEnd      => 'B',
            artistName   => 'F',
            upc          => 'H',
            albumName    => 'G',
            isrc         => 'L',
            trackNum     => 'J',
            trackName    => 'K',
            units        => 'M',
            currencyCode => 'S',
            price        => 'Q',
        },
    );

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

sub _headerIdentifier { isrc => 'ISRC' }

sub serviceID   { Client::Service::DSP_IHEART_RADIO }
sub productType { RPS::File::Sale::TYPE_TRACK }
sub mediaType   { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub formatType  {
    my $self = shift;

    return RPS::File::Sale::FORMAT_PERFORMANCE unless ($self->version == 48);

    my $format = $self->_getByFieldName('formatType') || '';
    return RPS::File::Sale::FORMAT_STREAM
        if $format =~ /^(?:All[- ]?Access(?: Tier)?|Plus(?: Tier)?|Family(?: Plan)?)$/i;

    $self->fail("Unable to determine format type from '$format'");
}

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 units {
    my $self = shift;

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

    $price =~ s/[^0-9\.]//g;
    $units =~ s/[^0-9]//g;

    if ( $price > 0 ) {
        $units = $units ? abs($units) : 1;
    } elsif ( $price < 0 ) {
        $units = $units ? -1 * abs($units) : -1;
    }

    return $units;
}

sub _isValidSaleRecord {
    my $self = shift;
    return $self->units && defined $self->price;
}


1;
