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;#
###
