package RPS::Import::MVD::v8;

use strict;

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

sub _headerIdentifier { ( dateBegin => qr/DATE|period_start/ ) }

sub _fieldMap {
    {
        countryCode      => 'S',
        dateBegin        => 'F',
        dateEnd          => 'G',
        productType      => 'L',
        clientProductID  => 'J',
        artistName       => 'L',
        upc              => 'K',
        albumName        => 'L',
        retailPrice      => 'N',
        totalRevenue     => 'R',
    }
}
sub _unverifiedFieldMap {
    {
        title    => 'L',
        netUnits => 'M',
    }
}

sub channel      { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel   { RPS::File::Sale::PLEVEL_UNKNOWN }
sub currencyCode { 'USD' }
sub physical     { 1 }
sub serviceID    { Client::Service::DSP_MVD }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('productType') || "";
    $type =~ /\[([a-z0-9\/]{1,6})\]/i;

    return RPS::File::Sale::TYPE_CD         if $1 =~ /^Z?CD$/i;
    return RPS::File::Sale::TYPE_LP         if $1 =~ /^LP$/i;
    return RPS::File::Sale::TYPE_DVD        if $1 =~ /^D(?:VD)?$/i;
    return RPS::File::Sale::TYPE_DVD_CD_SET if $1 =~ /^CD\/DVD$/i;

    $self->fail("Unable to determine product type from '$type'");
}

sub saleDates {
    my $self = shift;
    my $ds   = $self->_getByFieldName('dateBegin');
    my $sdate;
    my $edate;
    if ( exists $self->_fieldMap->{'dateEnd'} ) {
        my $de = $self->_getByFieldName('dateEnd');
        ( $sdate, $edate ) = $self->_getDates( date_begin => $ds, date_end => $de );
    } else {
        ( $sdate, $edate ) = $self->_getDates( date_begin => $ds );
    }
    return ( $sdate, $edate );
}

sub totalRevenue {
    my $self    = shift;
    my $revenue = $self->_getByFieldName('totalRevenue');
    $revenue =~ s/,//g;
    return $revenue;
}

sub sales {
    my $self    = shift;
    my $sales   = $self->_getByFieldName('netUnits');
    my $revenue = $self->totalRevenue;
    return ( $revenue >= 0 ) ? abs($sales) : 0;
}

sub salesRevenue {
    my $self    = shift;
    my $revenue = $self->totalRevenue;
    return ( $revenue > 0 ) ? $revenue : 0;
}

sub returns {
    my $self    = shift;
    my $sales   = $self->_getByFieldName('netUnits');
    my $revenue = $self->totalRevenue;
    return ( $revenue < 0 ) ? abs($sales) : 0;
}

sub returnsRevenue {
    my $self    = shift;
    my $revenue = $self->totalRevenue;
    return ( $revenue < 0 ) ? abs($revenue) : 0;
}

sub albumName {
    my $self = shift;

    my $name = $self->_getByFieldName('albumName') || "";
    $name =~ /- ?(.+?) \[/;

    return $1 if $1;
}
sub artistName {
    my $self = shift;

    my $name = $self->_getByFieldName('albumName') || "";
    $name =~ /(.+?) ?-/;

    return $1 if $1;
}

sub free {
    my $self = shift;

    return ($self->units && !$self->totalRevenue) ? 1 : 0;
}

sub _isValidSaleRecord {
    my $self    = shift;

    my $title   = $self->_getByFieldName('title');
    my $revenue = $self->totalRevenue;
    my $units   = $self->_getByFieldName('netUnits');

    return ( $title && ( $revenue || $units ) );
}

1;
