package RPS::Import::MVD::v7;

use strict;

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

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

sub _fieldMap {
    {
        dateBegin       => 'O',
        dateEnd         => 'O',
        productType     => 'C',
        clientProductID => 'A',
        totalRevenue    => 'N',
        mediaType       => 'C',
    }
}

sub _unverifiedFieldMap {
    {
        title    => 'B',
        netUnits => 'I',
    }
}

sub channel      { RPS::File::Sale::CHANNEL_RETAIL }
sub priceLevel   { RPS::File::Sale::PLEVEL_UNKNOWN }
sub countryCode  { 'US' }
sub currencyCode { 'USD' }
sub physical     { 1 }

sub productType {
    my $self = shift;
    if ( exists $self->_fieldMap->{'productType'} ) {
        my $type = $self->_getByFieldName('productType');
        if ( $type =~ /^CD$/i ) {
            return RPS::File::Sale::TYPE_CD;
        } elsif ( $type =~ /^ZCD$/i ) {
            return RPS::File::Sale::TYPE_CD;
        } elsif ( $type =~ /^D$/i ) {
            return RPS::File::Sale::TYPE_DVD;
        } elsif ( $type =~ /^LP$/i ) {
            return RPS::File::Sale::TYPE_LP;
        } else {
            $self->fail("Unable to determine product type from '$type'");
        }
    } else {
        return RPS::File::Sale::TYPE_CD;
    }
}

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 albumName { shift->{_albumName}; }

sub artistName { shift->{_artistName}; }

sub _processLine {
    my $self  = shift;
    my $title = $self->_getByFieldName('title');

    if ($title) {
        my ( $artist, $album ) = split( "-", $title );
        $album =~ s/^\s*//;
        $artist =~ s/\s*$//;

        if ( $artist =~ /,/ ) {
            my ( $lastName, $firstName ) = split( ",", $artist );
            $firstName =~ s/^\s*//;
            $artist = "$firstName $lastName";
        }

        ( $self->{_albumName}, $self->{_artistName} ) = ( $album, $artist );
    }

    return $self->SUPER::_processLine(@_);
}

sub mediaType {
    my $self = shift;

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

    return RPS::DB::Item::MediaType::kMediaTypeVideo if (uc($mediaType) eq "D");
    return RPS::DB::Item::MediaType::kMediaTypeAudio if ($mediaType =~ /^(?:LP|Z?CD)$/i);

    $self->fail("Unable to determine mediaType from $mediaType");
}

1;
