package RPS::Import::7Digital::v13;

use strict;

use Date::Calc qw(Days_in_Month);

use Data::Dumper;

use lib '/app/tools/common/lib';

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

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

sub _fieldMap {
    {
        # header
        dateBegin     => 'A2',
        dateEnd       => 'B2',

        # detail
        labelName     => 'I',
        upc           => 'H',
        productType   => 'N',
        formatType    => 'L',
        albumName     => 'D',
        isrc          => 'G',
        trackName     => 'F',
        price         => 'R',
        countryCode   => 'K',
    }
}

sub _unverifiedFieldMap {
    {
        productArtist => 'C',
        trackArtist   => 'E',
        serviceName   => 'J',
    }
}

sub _headerIdentifier { ( upc => 'UPC' ) }

sub units { 1 }

sub currencyCode {
    my $self = shift;
    return $self->{_currencyCode}; # From header; see _preProcess
}

sub saleDates {
    my $self  = shift;
    my $sdate = $self->_getByFieldName('dateBegin');
    my $edate = $self->_getByFieldName('dateEnd');

    my $dateBegin;
    my $dateEnd;
    if( $sdate =~ /(2\d{3})(\d{2})(\d{2})/ )
    {
        my( $sYear, $sMonth, $sDay ) = ($1, $2, $3);
        if( $edate =~ /(2\d{3})(\d{2})(\d{2})/ )
        {
            $dateBegin = sprintf("%04d-%02d-%02d", $sYear, $sMonth, $sDay );
            $dateEnd   = sprintf("%04d-%02d-%02d", $1, $2, $3 );
        }
    }
    return( $dateBegin, $dateEnd );
}

sub serviceID {
    my $self = shift;
    my $serviceName = $self->_getByFieldName('serviceName');
    my $serviceID = $self->getServiceID( $serviceName ) ||
                    $RPS::Import::ServiceMap::SERVICE_ALIASES{ lc $serviceName };

    return $serviceID if( $serviceID );

    $self->fail("Unknown service '$serviceName'");
}

sub productType { 
    my $self = shift;
    my $type = $self->_getByFieldName('productType');
    return( $type == 1 ) ? RPS::File::Sale::TYPE_TRACK : RPS::File::Sale::TYPE_ALBUM;
}

sub formatType { 
    my $self = shift;
    my $type = $self->_getByFieldName('formatType');
    if( $type =~ /^mp3$/i )
    {
        return RPS::File::Sale::FORMAT_DOWNLOAD;
    }
    elsif( $type =~ /^flac$/i )
    {
        return RPS::File::Sale::FORMAT_DOWNLOADPREMIUM;
    }
    $self->fail("Unknown format '$type'");
}

sub mediaType { return RPS::DB::Item::MediaType::kMediaTypeAudio; }

sub artistName {
    my $self = shift;

    if( $self->productType() eq RPS::File::Sale::TYPE_ALBUM )
    {
        return $self->_getByFieldName('productArtist');
    }
    else
    {
        return $self->_getByFieldName('trackArtist');
    }
}


sub _preProcess {
    my $self = shift;
    my %args = @_;
    $self->SUPER::_preProcess(%args);

    foreach my $line(@{$args{lines}})
    {
        $self->{line} = $line;
        my $price = $self->_getByFieldName('price');
        if( $price =~ /Label Revenue \((\w{3})\)/i )
        {
            $self->{_currencyCode} = $1;
            last;
        }
    }
    if( !$self->{_currencyCode} )
    {
        print STDERR "_preProcess: unable to get currency code from header\n";
        $self->fail("Unable to get currency code");
        return undef;
    }
}

###
1;# Play nicely.
###
