package RPS::Import::Youtube::v25;

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

use Client::Service;
use RPS::Import::ServiceMap;
use POSIX qw(ceil);

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

sub _fieldMap {
    {
        labelName        => 'N',
        countryCode      => 'C',
        dateBegin        => 'B',
        dateEnd          => 'B',
        serviceProductID => 'E',
        artistName       => 'L',
        upc              => 'J',
        albumName        => 'M',
        isrc             => 'I',
        trackName        => 'F',
        units            => 'O',
        price            => 'S',
    };
}

sub _headerIdentifier { upc => 'Upc' }

sub currencyCode { 'USD' }
sub productType  { RPS::File::Sale::TYPE_TRACK }
sub formatType   { RPS::File::Sale::FORMAT_STREAM }
sub serviceID    { Client::Service::DSP_YOUTUBE }

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 ceil($units);
}

sub mediaType {
    my $self = shift;

    if ( $self->filename =~ /Audio Tier/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    }
}

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;
