package RPS::Import::Ogangi2;

use strict;

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

sub _fieldMap {
    {
        serviceID        => 'I',
        countryCode      => 'G',
        artistName       => 'C',
        dateBegin        => 'B1',
        formatType       => 'J',
        serviceProductID => 'A',
        trackName        => 'B',
        isrc             => 'E',
        units            => 'P',
        price            => 'X',
    }
}

sub _unverifiedFieldMap {
    {
        subType          => 'K',
    }
}

sub _headerIdentifier { ( countryCode => 'Territory' ) }

sub productType { RPS::File::Sale::TYPE_TRACK } 

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

    if( $type =~ /^tone$/i )
    {
        if( $subType =~ /^(ftrk|trck|true|1)$/i )
        {
            return RPS::File::Sale::FORMAT_RINGTONE;
        }
    }
    elsif( $type =~ /^video$/i )
    {
        if( $subType =~ /^(3gp|3gpp|vide)$/i )
        {
            return RPS::File::Sale::FORMAT_DOWNLOAD;
        }
        elsif( $subType =~ /^mpg4$/i )
        {
            return RPS::File::Sale::FORMAT_DOWNLOADPREMIUM;
        }
    }

    $self->fail( "Could not determine format from type($type) subType($subType)" );
}

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

    if( $type =~ /^tone$/i )
    {
        if( $subType =~ /^(ftrk|trck|true|1)$/i )
        {
            return RPS::DB::Item::MediaType::kMediaTypeAudio;
        }
    }
    elsif( $type =~ /^video$/i )
    {
        if( $subType =~ /^(3gp|3gpp|vide|mpg4)$/i )
        {
            return RPS::DB::Item::MediaType::kMediaTypeVideo;
        }
    }

    $self->fail( "Could not determine media from type($type) subType($subType)" );
}

sub currencyCode {
    my $self = shift;
    return $self->{_currencyCode} if( $self->{_currencyCode} ); # from header; see _processHeader
}

sub _processHeader {
    my $self = shift;

    unless( $self->{_currencyCode} ) {
        my $st = $self->_getByFieldName('price');
        if( $st =~ /^(\w{3}) Royalty$/i )
        {
            $self->{_currencyCode} = $1;
        }
    }
}

sub countryCode {
    my $self = shift;

    my $name = $self->_getByFieldName('countryCode');
    my $country = Common::Country->Get($name);
    if( $country )
    {
        return $country->alpha2();
    }
    $self->fail( "Unknown country: $name" );
}

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

    my $serviceID = $self->getServiceID(lc ($service)) || $RPS::Import::ServiceMap::SERVICE_ALIASES{ lc $service };    

    return $serviceID if( $serviceID );

    $self->fail( "Unknown service: $service" );
}

sub saleDates {
    my $self = shift;
    if( !$self->{_startDate} )
    {
        my $dt = $self->_getByFieldName('dateBegin');
        ($self->{_startDate}, $self->{_endDate}) = $self->_getDates( date_begin => $dt );
    }
    return($self->{_startDate}, $self->{_endDate});
}

sub _isValidSaleRecord
{
    my $self = shift;

    my $type = $self->_getByFieldName('formatType');
    my $subType = $self->_getByFieldName('subType');

    if( $type =~ /^graphic$/i && $subType =~ /^stic$/i )
    {
        $self->fail("Cannot process wallpaper sales");
        return undef;
    }

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

sub price {
    my $self = shift;
    my $price = $self->_getByFieldName('price');
    $price =~ s/^\$//;
    return $price;
}
###
1;# Play nicely.
###
