package RPS::Import::BanditFM;

use strict;

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

sub _headerIdentifier { ( countryCode => 'Country' ) }

sub _fieldMap {
    my $self = shift;

    my %fieldMap = (
        1 => {
            labelName    => 'F',
            countryCode  => 'M',
            productType  => 'C',
            formatType   => 'C',
            artistName   => 'D',
            upc          => 'H',
            albumName    => 'E',
            isrc         => 'H',
            trackName    => 'E',
            units        => 'I',
            currencyCode => 'N',
            price        => 'L',
            mediaType    => 'C',
        },
    );

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

# saleDates - return the start/end date information for the file.
#
sub saleDates {
    my $self = shift;

    return ( $self->{_startDate}, $self->{_endDate} ) if ( $self->{_startDate} );

    $self->fail("Unknown filename") unless ( $self->filename );

    # We'll look for the pattern "YYYYMMDD" to determine the sales period
    #
    unless ( $self->filename =~ /_(\d{4})(\d{2})(\d{2})\./ ) {
        $self->fail( "Could not determine period from filename '" . $self->filename . "'" );
    }

    my $startDate = sprintf( "%04d-%02d-%02d", $1, $2, $3 );

    ( $self->{_startDate}, $self->{_endDate} ) = $self->_getDates( date_begin => $startDate );

    return ( $self->{_startDate}, $self->{_endDate} );
}

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

    if ( $type =~ /^audio track$/i ) {
        return RPS::File::Sale::TYPE_TRACK;
    } elsif ( $type =~ /^audio collection$/i ) {
        return RPS::File::Sale::TYPE_ALBUM;
    }
    $self->fail("Unknown productType '$type'");
}

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

    if ( $type =~ /^audio track$/i || $type =~ /^audio collection$/i ) {
        return RPS::File::Sale::FORMAT_DOWNLOAD;
    }
    $self->fail("Unknown formatType '$type'");
}

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

    if ( $type =~ /^audio track$/i || $type =~ /^audio collection$/i ) {
        return RPS::DB::Item::MediaType::kMediaTypeAudio;
    }
    $self->fail("Unknown mediaType '$type'");
}

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

    if ( $type eq RPS::File::Sale::TYPE_ALBUM ) {
        return $upc;
    }
}

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

    if ( $type eq RPS::File::Sale::TYPE_ALBUM ) {
        return $name;
    }
}

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

    if ( $type eq RPS::File::Sale::TYPE_TRACK ) {
        return $isrc;
    }
}

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

    if ( $type eq RPS::File::Sale::TYPE_TRACK ) {
        return $trackName;
    }
}

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