package RPS::Import::NetEase::v1;

use strict;
use warnings;

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

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

sub _fieldMapExtended {
    {
        digital => {
            option1 => {    # FREE & PAID sheets
                artistName   => 'E',
                upc          => 'B',
                albumName    => 'D',
                isrc         => 'A',
                trackName    => 'C',
                currencyCode => 'H',
                free         => 'H',
                price        => 'H',
            },
            option2 => {    # SINGLE
                artistName   => 'E',
                upc          => 'B',
                albumName    => 'D',
                isrc         => 'A',
                trackName    => 'C',
                currencyCode => 'I',
                price        => 'I',
            },
        },
    };
}

sub _unverifiedFieldMapExtended {
    {
        digital => {
            option1 => {
                _streamsNum   => 'F',
                _downloadsNum => 'G',
            },
            option2 => {
                _salesNum => 'G',
            },
        },
    };
}

sub _headerIdentifierExtended {
    {
        digital => {
            option1 => { _streamsNum => 'No. of Streams' },
            option2 => { _salesNum   => 'No.of Sales' },
        },
    };
}

sub countryCode  { 'CN' }
sub currencyCode { 'RMB' }
sub productType  { RPS::File::Sale::TYPE_TRACK }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub unitPrice    { abs shift->SUPER::unitPrice }

sub saleDates {
    my $self = shift;

    # sheets: 201804 Free | 201805 Paid | 201806 Single
    my @dates = $self->sheetname =~ /^(\d{4})(\d{1,2})/;
    $self->fail( "Unable to determine date from sheet name." ) unless @dates == 2;

    return $self->_getDates( date_begin => sprintf "%04d-%02d-%02d", @dates, 1 );
}

sub formatType {
    my $self = shift;

    return RPS::File::Sale::FORMAT_STREAM   if $self->sheetname =~ /(?:free|paid)\s*$/i;
    return RPS::File::Sale::FORMAT_DOWNLOAD if $self->sheetname =~ /single\s*$/i;

    $self->fail( "Unable to determine format_type from sheetname." );
}

sub units {
    my $self = shift;

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

    if ( $self->dataTypeOption eq 'option1' ) {
        my $streamsNum   = $self->_getByFieldName('_streamsNum')   || 0;
        my $downloadsNum = $self->_getByFieldName('_downloadsNum') || 0;
        $units = abs $streamsNum + abs $downloadsNum;
    } elsif ( $self->dataTypeOption eq 'option2' ) {
        my $salesNum = $self->_getByFieldName('_salesNum') || 0;
        $units = abs $salesNum;
    }

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

    return $units;
}

sub free {
    return $_[0]->sheetname =~ /free\s*$/i && not $_[0]->price;
}


1;