package RPS::Import::Sony::Digital;

use strict;

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

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

use Data::Dumper;

sub _headerIdentifier { (albumName => 'Product Title') }

sub units {
    my $self = shift;
    my $_units = $self->_getByFieldName('units') || return;
    my $_price = $self->_getByFieldName('price') || return;

    # Making units follow the sign of the revenue
    if ( ($_price < 0 && $_units > 0) || ($_price > 0 && $_units < 0) ) {
        $_units *= -1;
    }
    
    return $_price ? $_units : undef;  # This will effectively skip lines with no revenue
}

sub _isValidSaleRecord {
    my $self = shift;
    my $type = $self->type();

    if( $type && lc($type) eq 'wallpapr' ) {
        return;
    }

    return $self->SUPER::_isValidSaleRecord();
}

sub _productTypes {
    my $self = shift;

    my $format = lc($self->_getByFieldName('format')) || return;
    my $type   = lc($self->type()) || return;
    my $result;

    if( $type eq 'audio lp' ) {
        $result = $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }

            : $format eq 'online' && $self->trackName ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }

            : $format eq 'physical retail' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }

            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }

            : $format eq 'brkg-subscript' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }
            
            : $format eq 'brkg-online' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }            

            : undef;
    }

    elsif( $type eq 'audtrack' ) {
        $result = $format eq 'd2c-dig' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'physical retail' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-online' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-subscript' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'locker-download' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'locker-stream' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'dl-condi' ?
            {
                formatType => RPS::File::Sale::FORMAT_TETHERED,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-con' ? # FB9011
            {
                formatType => RPS::File::Sale::FORMAT_TETHERED,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : undef
    }
    elsif( $type eq 'vidlp' ) {
        $result = $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }
            
            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }            
            
            : undef
    }
    elsif( $type eq 'audbndle' ) {
        $result = $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }
            : undef
    }

    elsif( $type eq 'bundle' ) {
        $result = $format eq 'online' && $self->trackName ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_ALBUM,
            }

            : undef;
    }

    elsif( $type eq 'ringback' ) {
        $result = $format eq 'brkg-mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : undef;
    }


    elsif( $type eq 'ringtone' ) {
        $result = $format eq 'brkg-mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-con' ? # FB9011
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeAudio,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : undef;
    }

    elsif( $type eq 'vidtone' ) {
        $result = $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_RINGTONE,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : undef;
    }

    elsif( $type eq 'vidtrack' ) {
        $result = $format eq 'brkg-subscript' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'other' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'subscription' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'mobile' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'locker-download' ?
            {
                formatType => RPS::File::Sale::FORMAT_STREAM,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'brkg-online' ?
            {
                formatType => RPS::File::Sale::FORMAT_DOWNLOAD,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : $format eq 'dl-condi' ? # FB9011
            {
                formatType => RPS::File::Sale::FORMAT_TETHERED,
                mediaType => RPS::DB::Item::MediaType::kMediaTypeVideo,
                productType => RPS::File::Sale::TYPE_TRACK,
            }

            : undef;
    }

    $self->fail( "Could not determine format information. Type: '$type' Format: '$format'" ) unless( $result );

    return { $type => $result }
}

sub _getDateBegin {
    my $self = shift;
    my $date = $self->SUPER::_getDateBegin() || return;

    my $d = new Common::Date( $date );
    return $d->halfBegin;
}

sub _getDateEnd {
    my $self = shift;
    my $date = $self->SUPER::_getDateEnd() || return;

    my $d = new Common::Date( $date );
    return $d->halfEnd;
}

sub currencyCode { shift->{_currencyCode} }

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

    $self->fail( "No country specified" )
        unless( $country && length($country) );

    my %countryMap = (
        'rep. korea'     => 'KR',
        'slovakia rep.'  => 'SK',
        'arab emirates'  => 'AE',
        'dominican rep.' => 'DO',
        'st. lucia'      => 'LC',
        'antigua & barbu' => 'AG',
    );

    $country = $countryMap{lc $country} if( exists $countryMap{lc $country} );

    my $c = new Common::Country( search => $country );
    return $c->alpha2() if( $c );

    $self->fail( "Unable to determine country code from '$country'" );
}


sub _processHeader {
    my $self = shift;
    my $currencyCode = $self->SUPER::currencyCode || return;

    return if( $self->{_currencyCode} );

    $self->{_currencyCode} = $currencyCode if( $currencyCode =~ /^\w{3}$/ );
}


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