package RPS::Import::PPL::v1;

use strict;
use warnings;

use Client::Service;
use Date::Calc qw(Add_Delta_Days Days_in_Month);

use parent 'RPS::Import::Importer';

sub _fieldMap {
    {
        dateBegin        => 'D',
        serviceProductID => 'G',
        artistName       => 'I',
        isrc             => 'H',
        trackName        => 'J',
        currencyCode     => 'P1',
        price            => 'P',
        mediaType        => 'E',
    };
}

sub _headerIdentifier { isrc => 'RECORDING ISRC' }

sub serviceID { Client::Service::DSP_PPL }
sub productType { RPS::File::Sale::TYPE_TRACK }
sub formatType { RPS::File::Sale::FORMAT_PERFORMANCE }
sub countryCode { 'GB' }

sub currencyCode {
    my $self = shift;

    my $code = $self->_getByFieldName('currencyCode') || "";
    return $code =~ /(\w{3})\)?$/;
}

sub saleDates {
    my $self = shift;

    my $date = $self->_getByFieldName('dateBegin')  || 0;
    # YYYY-MM
    $date =~ /^(\d{4})-(\d{1,2})$/;

    my $startDate = sprintf( "%04d-%02d-%02d", $1, $2, 1 );
    my $endDate = sprintf( "%04d-%02d-%02d", $1, $2, Days_in_Month( $1, $2 ) );

    return ($startDate, $endDate);
}

sub mediaType {
    my $self = shift;

    my $type = $self->_getByFieldName('mediaType') || '';
    return RPS::DB::Item::MediaType::kMediaTypeAudio if $type =~ /^audio$/i;
    return RPS::DB::Item::MediaType::kMediaTypeVideo if $type =~ /^video$/i;
}

sub units { ($_[0]->price() < 0) ? -1 : 1 }

sub price {
    my $self = shift;

    my $price = $self->_getByFieldName('price') || 0;
    return $price =~ s/,//gr;
}

1;
