package RPS::Import::GoogleMusicTRANS;

use strict;

use lib '/app/tools/rps/lib';
use RPS::File::Sale;
use base 'RPS::Import::Importer';

sub _fieldMap {
    {
        dateBegin    => 'A',
        dateEnd      => 'B',
        upc          => 'C',
        isrc         => 'E',
        artistName   => 'K',
        labelName    => 'O',
        countryCode  => 'P',
        type         => 'R',
        price        => 'AB',
        currencyCode => 'AC',
    };
}

sub _unverifiedFieldMap {
    {
        partnerRevenueInvoicedCurrency => 'M2',
        partnerRevenueCurrency         => 'AA',

        partnerRevenuePaid => 'Z',
        productTitle       => 'L',
        containerTitle     => 'M',
        interactionType    => 'S',
        count              => 'T',
    };
}

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

sub formatType { RPS::File::Sale::FORMAT_DOWNLOAD }
sub mediaType  { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub _processLine {
    my $self = shift;

    # Get the price and save it
    #
    $self->{_price} = 0;
    my $price = $self->_getByFieldName('price');
    if ( !$price ) {
        $price = $self->_getByFieldName('partnerRevenuePaid');
    }
    $self->{_price} = $price;

    return $self->SUPER::_processLine(@_);
}

sub price {
    my $self = shift;
    return $self->{_price};
}

sub _productTypes {
    {
        'album' => {
            productType => RPS::File::Sale::TYPE_ALBUM,
        },
        'track' => {
            productType => RPS::File::Sale::TYPE_TRACK,
        },
    };
}

sub albumName {
    my $self = shift;

    my $productType = $self->productType;

    if ( $productType eq RPS::File::Sale::TYPE_TRACK ) {
        return $self->_getByFieldName('containerTitle');
    } else {
        return $self->_getByFieldName('productTitle');
    }
}

sub trackName {
    my $self = shift;

    my $productType = $self->productType;

    if ( $productType eq RPS::File::Sale::TYPE_TRACK ) {
        return $self->_getByFieldName('productTitle');
    }
}

sub currencyCode {
    my $self = shift;

    my $currencyCode = $self->SUPER::currencyCode();

    if ( !$currencyCode ) {
        $currencyCode = $self->_getByFieldName('partnerRevenueInvoicedCurrency');
    }
    if ( !$currencyCode ) {
        $currencyCode = $self->_getByFieldName('partnerRevenueCurrency');
    }

    return $currencyCode;
}

sub units {
    my $self = shift;

    my $interactionType = $self->_getByFieldName('interactionType');
    $self->fail("Unrecognized Interaction Type: $interactionType")
      if ( $interactionType && $interactionType !~ /^(PAYMENT|RETURN|REFUND)$/i );

    my $count = $self->_getByFieldName('count');

    $count = -$count if ( $count && ( lc($interactionType) eq 'return' || lc($interactionType) eq 'refund' ) );
    return $count;
}

sub unitPrice {
    my $self = shift;
    return ( 0 == $self->price ) ? 0 : $self->SUPER::unitPrice();
}

###
1;    #
###
