package RPS::Import::WMG::WarnerMobile6;

use strict;
use warnings;

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

use base 'RPS::Import::Importer';

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        6 => {
            serviceID        => 'M',
            countryCode      => 'P',
            dateBegin        => 'AI',
            dateEnd          => 'AI',
            productType      => 'O',
            formatType       => 'L',
            serviceProductID => 'G',
            artistName       => 'F',
            albumName        => 'E',
            isrc             => 'J',
            trackName        => 'H',
            units            => 'AE',
            price            => 'AG',
            mediaType        => 'O',
        },
    );

    return $fieldMap{ $self->_version };
}

sub currencyCode      { 'USD' }
sub _headerIdentifier { isrc => 'Track Number' }

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

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

    if ( $service =~ /^kr0093[37]|unmapped dsp$/i ) {
        return Client::Service::DSP_WARNER_MOBILE;
    }

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

sub saleDates {
    my $self = shift;

    my $period = $self->_getDateBegin() || '';

    my ($dateBegin, $dateEnd);
    if ( $period =~ /^(\d{4}) H1$/i ) {
        $dateBegin = sprintf "%04d-%02d-%02d", $1, 1, 1;
        $dateEnd   = sprintf "%04d-%02d-%02d", $1, 6, 30;
    }
    elsif ( $period =~ /^(\d{4}) H2$/i ) {
        $dateBegin = sprintf "%04d-%02d-%02d", $1, 7, 1;
        $dateEnd   = sprintf "%04d-%02d-%02d", $1, 12, 31;
    }

    return $self->_getDates( date_begin => $dateBegin, date_end => $dateEnd );
}

sub countryCode {
    my $self = shift;

    my $country = lc ($self->_getByFieldName('countryCode') || '');
    my $oCountry = Common::Country->new( search => $country );
    return $oCountry->alpha2() if $oCountry;

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

sub productType {
    my $self = shift;

    my $type      = $self->_getByFieldName('productType') || '';
    my $trackName = $self->_getByFieldName('trackName')   || '';

    if ( $type =~ /^AudTrack|VidTrack$/i ) {
        return RPS::File::Sale::TYPE_TRACK;
    }
    elsif ( $type =~ /^AudBndle$/i && $trackName ) {
        return RPS::File::Sale::TYPE_TRACK;
    }
    elsif ( $type =~ /^Audio\s?LP/i ) {
        return $trackName ? RPS::File::Sale::TYPE_TRACK : RPS::File::Sale::TYPE_ALBUM;
    }

    $self->fail("Could not parse product type from '$type'");
}

sub formatType {
    my $self = shift;

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

    if ( $type =~ /^3RD|Brk-Download|Download/i ) {
        return RPS::File::Sale::FORMAT_DOWNLOAD;
    }
    elsif ( $type =~ /^Ad-Supported|Brk-Subscriptio|Ephemeral Pre-P|Subscription$/i ) {
        return RPS::File::Sale::FORMAT_STREAM;
    }

    $self->fail("Could not parse fortmat type from '$type'");
}

sub mediaType {
    my $self = shift;

    my $type = $self->_getByFieldName('mediaType') || '';

    if ( $type =~ /^Aud(?:Bndle|Track|io LP)$/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    }
    elsif ( $type =~ /^VidTrack$/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeVideo;
    }

    $self->fail("Could not parse media type from '$type'");
}


1;