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