package RPS::Import::Youtube::v26;

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

use Client::Service;
use RPS::Import::ServiceMap;

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

sub _fieldMap {
    {
        labelName        => 'F',
        countryCode      => 'B',
        dateBegin        => 'A',
        dateEnd          => 'A',
        serviceProductID => 'D',
        artistName       => 'J',
        upc              => 'H',
        albumName        => 'K',
        isrc             => 'C',
        trackName        => 'E',
        units            => 'L',
        currencyCode     => 'M1',
        price            => 'M',
    };
}

sub _headerIdentifier { upc => 'upc' }

sub productType { RPS::File::Sale::TYPE_TRACK }
sub formatType  { RPS::File::Sale::FORMAT_STREAM }
sub serviceID   { Client::Service::DSP_YOUTUBE }
sub mediaType   { RPS::DB::Item::MediaType::kMediaTypeVideo }

sub currencyCode {
    my $self = shift;

    my $code = $self->_getByFieldName("currencyCode") || "";

    return uc($1) if ($code =~ /^Total.Payable.(\w{3})$/i);

    $self->fail("Cannot determine currency code from '$code'");
}

sub units {
    my $self = shift;

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

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

    return $units;
}

sub serviceProductID {
    my $self = shift;

    my $serviceProductID = $self->_getByFieldName('serviceProductID') || "";
    return !($self->albumName || $self->trackName || $self->artistName ||$self->isrc || $self->upc) ? $serviceProductID : undef;
}

sub _isValidSaleRecord {
    my $self = shift;

    return 0 unless ($self->units || $self->price);
    my $serviceProductID = $self->_getByFieldName('serviceProductID') || "";

    unless ($self->albumName || $self->trackName || $self->artistName ||$self->isrc || $self->upc) {
        return 1 if $serviceProductID;
        $self->fail("Missing valid sales data. ");
    }

    return 1;
}

1;
