package RPS::Import::PPCA::v1;

use strict;
use warnings;

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

use parent 'RPS::Import::ImporterMixed';

sub physical { 0 }

sub _fieldMapExtended {
    {
        digital => {
            option1 => {
                dateBegin   => 'B1',
                dateEnd     => 'B1',
                artistName  => 'B',
                isrc        => 'P',
                trackName   => 'L',
                price       => 'V',
                mediaType   => 'R',
            },
        },
    };
}

sub _unverifiedFieldMapExtended {{}}

sub _headerIdentifierExtended {
    {
        digital => {
            option1 => {
                isrc => 'ISRC',
            },
        },
    };
}

sub formatType   { RPS::File::Sale::FORMAT_PERFORMANCE }
sub serviceID    { Client::Service::DSP_PPCA }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub productType  { RPS::File::Sale::TYPE_TRACK }
sub currencyCode { 'USD' }
sub countryCode  { 'US' }
sub units        { 1 }

sub _preProcess {
    my $self = shift;
    my %args = @_;
    $self->SUPER::_preProcess(%args);
    foreach my $line(@{ $args{lines} }) {
        # B1
        if( !$self->{_startDate} && $line->[1] =~ /for the period (\d{2})\/(\d{2})\/(\d{4}) to (\d{2})\/(\d{2})\/(\d{4})/i ){
            $self->{_startDate} = sprintf( "%04d-%02d-%02d", $3, $1, $2);
            $self->{_endDate} = sprintf( "%04d-%02d-%02d", $6, $4, $5);
        }
    }
}

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);

    $self->fail("Can't determine media type from: '$type'.");
}

sub _isValidSaleRecord {
    return ($_[0]->_getByFieldName('artistName') || $_[0]->_getByFieldName('trackName')) &&
           ($_[0]->_getByFieldName('mediaType') || $_[0]->_getByFieldName('price'));
}

1;
