package RPS::Import::Merlin::v79;

use strict;
use warnings;

use lib '/app/tools/common/lib';
use lib '/app/tools/rps/lib';

use Common::Util qw(normalize_upc);

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

sub _fieldMap {
    {
        labelName    => 'C',
        countryCode  => 'B',
        upc          => 'F',
        albumName    => 'J',
        isrc         => 'H',
        trackName    => 'I',
        units        => 'L',
        currencyCode => 'N',
        price        => 'M',
    }
}

sub _unverifiedFieldMap {
    {
        ean => 'G',
    }
}

sub _headerIdentifier { upc => 'UPC' }

sub serviceID   { Client::Service::DSP_SPOTIFY; }
sub productType { RPS::File::Sale::TYPE_TRACK; }
sub formatType  { RPS::File::Sale::FORMAT_STREAM; }
sub mediaType   { RPS::DB::Item::MediaType::kMediaTypeAudio; }

sub upc {
    my $self = shift;

    my $upc  = $self->_getByFieldName('upc');
    $upc = $self->_getByFieldName('ean') unless $upc;

    return Common::Util::normalize_upc($upc);
}

sub saleDates {
    my $self = shift;

    my $dateBegin;
    if ( $self->filename =~ /mode-(\d{4})(\d{2})/i ) {
        my $month = $2;
        my $year  = $1;
        $dateBegin = sprintf( "%04d-%02d-%02d", $year, $month, 1 );
    }
    else {
        $self->fail( "Could not determine period from filename: '" . $self->filename . "'" );
    }

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

sub countryCode {
    my $self    = shift;

    my $country = $self->_getByFieldName('countryCode');
    my $obj     = Common::Country->Get($country);

    return $obj ? $obj->alpha2 : undef;
}

sub currencyCode {
    my $self = shift;

    return $self->_getByFieldName('currencyCode') || "";
}

1;
