package RPS::Import::Musiwave::Digital;

use strict;

use lib '/app/tools/common/lib';
use Common::Date;

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

use Data::Dumper;

sub _headerIdentifier { { artistName => 'Artist' } }

sub _getDateBegin {
    my $self = shift;

    my $filename = $self->filename() || return;
    $filename =~ /(\d{8})_\d{8}/ || $self->fail("Could not determine date from filename: $filename");

    return $1;
}

sub _getDateEnd {
    my $self = shift;

    my $filename = $self->filename() || return;
    $filename =~ /\d{8}_(\d{8})/ || $self->fail("Could not determine date from filename: $filename");

    return $1;
}

sub formatType { RPS::File::Sale::FORMAT_DOWNLOAD }

sub mediaType {
    my $self = shift;
    my $type = $self->_getByFieldName('productType') || return;

    if ( $type =~ /single full-track/i || $type =~ /album full-track/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    } elsif ( $type =~ /video full length/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeVideo;
    }
    $self->fail("Unable to determine media type from '$type'");
}

sub productType {
    my $self = shift;
    my $type = $self->_getByFieldName('productType') || return;

    if ( $type =~ /single full-track/i || $type =~ /video full length/i ) {
        return RPS::File::Sale::TYPE_TRACK;
    } elsif ( $type =~ /album full-track/i ) {
        return RPS::File::Sale::TYPE_ALBUM;
    }
    $self->fail("Unable to determine product type from '$type'");
}

sub albumName {
    my $self         = shift;
    my $productTitle = $self->_getByFieldName('productTitle');
    my $parentTitle  = $self->_getByFieldName('parentTitle');

    return $self->productType eq RPS::File::Sale::TYPE_TRACK ? $parentTitle : $productTitle;
}

sub trackName {
    my $self         = shift;
    my $productTitle = $self->_getByFieldName('productTitle');

    return $self->productType eq RPS::File::Sale::TYPE_TRACK ? $productTitle : undef;
}

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

    my $serviceID = $self->getServiceID($service) if ($service);

    $self->fail("Unknown service '$service'") unless ($serviceID);

    return $serviceID;
}

###
1;    # Play nicely.
###
