package RPS::Import::iMusica::v2;

use strict;

use lib '/app/tools/rps/lib';
use Date::Calc qw(Add_Delta_Days Days_in_Month);
use RPS::Import::ServiceMap;

use base 'RPS::Import::Importer';

sub _headerIdentifier { ( trackName => 'Track' ) }

sub _fieldMap {
    {
        serviceID    => 'A',
        countryCode  => 'A',
        dateBegin    => 'C',
        productType  => 'E',
        formatType   => 'O',
        artistName   => 'F',
        upc          => 'J',
        albumName    => 'H',
        isrc         => 'E',
        trackName    => 'D',
        units        => 'L',
        currencyCode => 'K',
        price        => 'N',
    };
}

sub _unverifiedFieldMap {}

sub mediaType { RPS::DB::Item::MediaType::kMediaTypeAudio }

sub serviceID {
    my $self = shift;

    my $service   = lc( $self->_getByFieldName('serviceID') || '' );
    $service =~ /^(.+)? -/;

    my $serviceID = $self->getServiceID($1) || $RPS::Import::ServiceMap::SERVICE_ALIASES{$1};
    return $serviceID if $serviceID;

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

sub countryCode {
    my $self = shift;
    my $countryCode = $self->_getByFieldName('countryCode') || "";

    $countryCode =~ /- (\w\w)/;
    return $1 if $1;

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

sub saleDates {
    my $self = shift;

    my $date = $self->_getByFieldName('dateBegin') || '';
    my ($startDate, $endDate);

    if ( $date =~ /^(\d\d)\/(\d{4})$/ ) {   # mm/yyyy
        my $year  = $2;
        my $month = $1;
        $startDate = sprintf( "%04d-%02d-%02d", $year, $month, 1 );
        $endDate = sprintf( "%04d-%02d-%02d", $year, $month, Days_in_Month( $year, $month ) );
	}

    return ( $startDate, $endDate );
}

sub productType {
    my $self = shift;

    my $productType = $self->_getByFieldName('productType') || "";
    return ($productType ? RPS::File::Sale::TYPE_TRACK : RPS::File::Sale::TYPE_ALBUM);

}

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

    if ( $formatType =~ /^(?:Streaming|Ilimitado)/i ) {
        return RPS::File::Sale::FORMAT_STREAM;
    } else {
        $self->fail("Unable to determine format type from '$formatType'");
    }
}

1;
