package RPS::Import::Bandcamp::v31;

use strict;
use warnings;

use parent 'RPS::Import::ImporterMixed';

sub _fieldMapExtended {
    {
        digital => {
            option1 => {
                labelName       => 'J',
                dateBegin       => 'U',
                dateEnd         => 'V',
                productType     => 'E',
                clientProductID => 'A',
                artistName      => 'I',
                upc             => 'B',
                albumName       => 'G',
                isrc            => 'C',
                trackName       => 'F',
                units           => 'L',
                currencyCode    => 'M',
                price           => 'S',
            },
        },
    };
}

sub _unverifiedFieldMapExtended {
    {
        digital => {
            option1 => {
                _region    => 'K',
                _currency  => 'M',
            },
        }
    };
}

sub _headerIdentifierExtended {
    {
        digital => {
            option1 => {
                upc => 'upc',
            },
        },
    };
}

sub serviceID   { Client::Service::DSP_BANDCAMP }
sub formatType  { RPS::File::Sale::FORMAT_DOWNLOAD }
sub mediaType   { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub countryCode {
    my $self = shift;

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

    my $name = '';
    if ( $_region =~ /^worldwide$/i ) {
        $name = substr($_currency, 0, 2);
    } else {
        $name = $_region;
    }

    my $oCountry = Common::Country->Get($name);
    return $oCountry->alpha2() if $oCountry;

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

sub productType {
    my $self = shift;

    my $type = $self->_getByFieldName('productType') || '';
    return RPS::File::Sale::TYPE_TRACK if $type =~ /^track$/i;
    return RPS::File::Sale::TYPE_ALBUM if $type =~ /^album$/i;

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

sub units {
    my $self = shift;

    my $units = $self->_getByFieldName('units') || 0;
    my $price = $self->_getByFieldName('price') || 0;

    if ( $price > 0 ) {
        $units = $units ? abs($units) : 1;
    } elsif ( $price < 0 ) {
        $units = $units ? -1 * abs($units) : -1;
    }

    return $units;
}


1;