package RPS::Import::ProAgency::v1;

use strict;
use warnings;

use RPS::Import::ServiceMap;

use lib '/app/tools/rps/lib';
use parent 'RPS::Import::ImporterMixed';

use Date::Calc qw(Add_Delta_Days Days_in_Month);

sub physical { 0 }

sub _fieldMapExtended {
    {
        digital => {
            option1 => {
                labelName    => 'G',
                serviceID    => 'A',
                countryCode  => 'J',
                dateBegin    => 'B',
                dateEnd      => 'B',
                productType  => 'E',
                formatType   => 'K',
                artistName   => 'D',
                isrc         => 'C',
                trackName    => 'E',
                currencyCode => 'B6',
                price        => 'L',
                mediaType    => 'I',
            },
         },
    };
}
sub _unverifiedFieldMapExtended { {} }

sub _headerIdentifierExtended {
    {
        digital => {
            option1 => {
                productType => 'TrackTitle',
            },
        },
    };
}

sub units        { 1 }
sub mediaType    { RPS::DB::Item::MediaType::kMediaTypeAudio }
sub formatType   { RPS::File::Sale::FORMAT_PERFORMANCE }
sub currencyCode { shift->{_currency_code} }

sub serviceID {
    my $self = shift;

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

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

sub saleDates {
    my $self = shift;

    my ($dateBegin, $dateEnd);
    my $dt = $self->_getByFieldName('dateBegin') || '';

    # YYYY
    if ( $dt =~ /^(\d{4})$/ ) {
        $dateBegin = sprintf( "%04d-%02d-%02d", $1, 12, 1 );
        $dateEnd   = sprintf( "%04d-%02d-%02d", $1, 12, 31 );
    }

    return $dateBegin, $dateEnd;
}

sub countryCode {
    my $self = shift;

    my $country = $self->_getByFieldName('countryCode') || '';
    if ($country){
        my $oCountry = Common::Country->Get($country);
        return $oCountry->alpha2 if $oCountry;
    }

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

sub productType {
    my $self = shift;

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

    return RPS::File::Sale::TYPE_TRACK if $type;

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

sub price     { abs( shift->_getByFieldName('price') || 0 ) }
sub unitPrice { abs shift->SUPER::unitPrice }

sub _processSheet {
    my ($self, $sheet, $sheetnum) = @_;

    my $sheetname = $self->{sheetname};
    # get a currency coded from the 'B6' cell on the Summarize sheet
    $self->{_currency_code} = $sheet->[5][1] if $sheetname =~ /^Summarize/i;

    return $self->SUPER::_processSheet($sheet, $sheetnum)
}

sub _isValidSaleRecord {
    my $self  = shift;

    return unless $self->units && $self->price;
    return 1;
}


1;
