package RPS::Import::INGrooves::v9;

use strict;

use lib '/app/tools/common/lib';
use Common::Date;
use Common::Country;

use lib '/app/tools/rps/lib';
use base 'RPS::Import::MapFaceBase';
use base 'RPS::Import::INGroovesBase';

use Data::Dumper;

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

sub _unverifiedFieldMap {
    {
        assetType   => 'Q',
    }
}


sub _fieldMap {
    {
        serviceID        => 'B',
        labelName        => 'T',
        countryCode      => 'L',
        dateBegin        => 'A',
        dateEnd          => 'C',
        productType      => 'P',  # why is this same as mediaType column?  how about column 'Q'?
        formatType       => 'U',
        mediaType        => 'P',
        artistName       => 'G',
        serviceProductID => 'J',
        upc              => 'I',
        albumName        => 'F',
        trackName        => 'D',
        isrc             => 'H',
        units            => 'M',
        price            => 'O',
    }
}

sub currencyCode { 'USD' }

sub countryCode {
    my $self = shift;
    my $name = $self->SUPER::countryCode();

	if ($name) {
	
	    $name =~ s/,.*//;
	
	    $name = $self->_getAlternateCountryName($name) || $name;
	
	    my $country = new Common::Country( search => $name );
	
	    if ($country) {
	    	return $country->alpha2();
		}
		
		return $name;
	}
}

sub productType           {
    my $self = shift;
    my $type = $self->_getByFieldName( 'productType' ) || return;
    my $service = $self->_serviceName();
    my $format = $self->_getByFieldName( 'formatType' );

    if( ! $format ) {
        my ( $serviceID, $formatType, $productType, $mediaType ) = $self->_getServiceFormat( $service, $type );
        return $productType if( $productType );
    } elsif( $type =~ /track|video|ringtone/i ) {
        return RPS::File::Sale::TYPE_TRACK;
    } elsif( $type =~ /album/i ) {
        return RPS::File::Sale::TYPE_ALBUM;
    }

    return $type;
}

sub formatType           {
    my $self = shift;
    my $type = $self->_getByFieldName( 'formatType' );
    my $mediaType    = $self->_getByFieldName( 'mediaType' );
    my $service = $self->_serviceName();

    if( ! $type ) {
        my ( $serviceID, $formatType, $productType, $mediaType ) = $self->_getServiceFormat( $service, $mediaType );
        return $formatType if( $formatType );
    } elsif( $type =~ /^(download|burn)$/i ) {
        return RPS::File::Sale::FORMAT_DOWNLOAD;
    } elsif( $type =~ /^(portable|stream|client|radio)$/i ) {
        return RPS::File::Sale::FORMAT_STREAM;
    } elsif( $type =~ /^jukebox$/i ) {
        return RPS::File::Sale::FORMAT_JUKEBOX;
    } elsif( $type =~ /^(kiosk|tethered download)$/i ) {
        return RPS::File::Sale::FORMAT_TETHERED;
    }

   return $type;
}

sub mediaType           
{
    my $self = shift;
    my $type    = $self->_getByFieldName( 'assetType' ) || return;

    if( $type =~ /audio album/i || $type =~ /master service tone\/ ringback tone/i )
    {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    }
    elsif( $type =~ /music video/i || $type =~ /^audio video bundle$/i )
    {
        return RPS::DB::Item::MediaType::kMediaTypeVideo;
    }
    else
    {
        return $type;
    }
}


sub _serviceName {
    my $self = shift;
    my $service = $self->_getByFieldName( 'serviceID' ) || return;
    $service     =~ s/ (\w{3})$//;

    return $service;
}


sub serviceID           {
    my $self = shift;
    my $type    = $self->_getByFieldName( 'productType' );
    my $service = $self->_serviceName();

    if( $type && $service ) {
        my ( $serviceID, $formatID, $productType, $mediaType ) = $self->_getServiceFormat( $service, $type );
        return $serviceID if( $serviceID );
    }

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

sub price {
    my $price = abs( shift->SUPER::price() );
    return $price;
}

sub units {
    my $self = shift;
    my $units = $self->SUPER::units();
    my $price = $self->SUPER::price();

    if( defined($price) ) {
        return $price < 0 ? abs($units) * -1 : $units;
    } else {
        return $units;
    }

}

sub unitPrice { abs( shift->SUPER::unitPrice ) }


## MapFace Stuff

sub _mapFaceServiceID {
	return ('serviceID');
}

sub _mapFaceCountryCode {
	return ('countryCode');
}

sub _mapFaceProductType {
	return ('formatType', 'productType', 'serviceID');
}

sub _mapFaceFormatType {
	return ('formatType', 'mediaType', 'serviceID');
}

sub _mapFaceMediaType {
	return ('assetType');
}

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