package RPS::Import::MusicNet::v8;

use strict;
use warnings;

use Date::Calc qw(Days_in_Month Decode_Month);

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

use parent qw/RPS::Import::MapFaceBase RPS::Import::Importer/;

sub _fieldMap {
    {
        labelName   => 'I',
        serviceID   => 'M',
        countryCode => 'P',
        productType => 'B',
        formatType  => 'H',
        artistName  => 'E',
        upc         => 'C',
        albumName   => 'D',
        isrc        => 'F',
        trackNum    => 'J',
        trackName   => 'B',
        units       => 'G',
        free        => 'N',
    };
}

sub _headerIdentifier { productType => 'Track Title' }

sub price        { 0 }
sub currencyCode { 'USD' }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }


sub saleDates {
    my $self = shift;

    # 2023-07-01_2023-07-31
    if ( $self->filename =~ /(\d{4})-(\d{1,2})-(\d{1,2})[ _](\d{4})-(\d{1,2})-(\d{1,2})/ ) {
        my $startDate = sprintf( "%04d-%02d-%02d", $1, $2, $3 );
        my $endDate = sprintf( "%04d-%02d-%02d", $4, $5, $6 );
        return ( $startDate, $endDate );
	}

    $self->fail("Unable to determine sale dates from file name.");
}

sub serviceID {
    my $self = shift;

    my $service = lc( $self->_getByFieldName('serviceID') || '' );
    $service =~ s/\s+(US|CANADA|CA|UK|FR|DE)$//i;

    my $serviceID = $self->getServiceID($service) || $RPS::Import::ServiceMap::SERVICE_ALIASES{$service};
    return $serviceID if $serviceID;

    return $self->handleError( "Unknown service: '$service'", RPS::DB::Item::SaleImportError::kErrorService );
}

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('productType') || '';
    return RPS::File::Sale::TYPE_TRACK if $type;

    $self->fail("Unable to determine product type from: '$type'");
}

sub formatType {
    my $self = shift;

    my $type = $self->_getByFieldName('formatType') || '';
    if ( $type =~ /^(?:Play Counts|Device Play Counts)$/i ) {
        return RPS::File::Sale::FORMAT_TETHERED;
    }
    if ( $type =~ /^Streams/i ) {
        return RPS::File::Sale::FORMAT_STREAM;
    }

    $self->fail("Unable to determine format type from: '$type'");
}

sub countryCode {
    my $self = shift;

    my $country = $self->_getByFieldName('countryCode') || '';
    my $oCountry = Common::Country->Get($country);
    return $oCountry->alpha2 if $oCountry;

    $self->fail("Unable to determine country code from: '$country'");
}

sub units {
    my $self = shift;

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

    return $units;
}

sub free {
    my $self = shift;

    my $free = $self->_getByFieldName('free') || '';
    return 0 if $free =~ /^NORMAL$/i;
    return 1 if $free =~ /^TRIAL$/i;
}

# mapFace
sub _mapFaceServiceID   { 'serviceID' }
sub _mapFaceCountryCode {  }
sub _mapFaceFormatType  {  }
sub _mapFaceProductType {  }
sub _mapFaceMediaType   {  }


1;
