package RPS::Import::Nightlife::v1;

use strict;
use warnings;

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

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

sub physical { 0 }

sub _fieldMapExtended {
    {
        digital => {
            option1 => {
                labelName    => 'K',
                dateBegin    => 'A1',
                artistName   => 'F',
                upc          => 'D',
                isrc         => 'C',
                trackName    => 'E',
                units        => 'G',
                price        => 'I',
                mediaType    => 'L',
            },
        },
    };
}

sub _unverifiedFieldMapExtended { {} }

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

sub productType  { RPS::File::Sale::TYPE_TRACK }
sub formatType   { RPS::File::Sale::FORMAT_PERFORMANCE }
sub serviceID    { Client::Service::DSP_NIGHTLIFE }
sub countryCode  { 'AU' }
sub currencyCode { 'AUD' }

sub mediaType {
    my $self = shift;

    my $type = $self->_getByFieldName('mediaType');
    return RPS::DB::Item::MediaType::kMediaTypeAudio if (lc($type) eq "y");
    return RPS::DB::Item::MediaType::kMediaTypeVideo;
}

sub saleDates {
    my $self = shift;

    my $dt = $self->_getByFieldName('dateBegin');
    my %months = (
       jan => 1,
       feb => 2,
       mar => 3,
       apr => 4,
       may => 5,
       jun => 6,
       jul => 7,
       aug => 8,
       sep => 9,
       oct => 10,
       nov => 11,
       dec => 12,
    );
    if ($dt =~ /FOR (\w{3}) - (\w{3}) (\d{4})$/) {
        my $year  = $3;
        my $month_start = $months{lc($1)};
        my $month_end = $months{lc($2)};
        my $startDate = sprintf( "%04d-%02d-%02d", $year, $month_start, 1 );
        my $endDate = sprintf( "%04d-%02d-%02d", $year, $month_end, Days_in_Month( $year, $month_end ) );

        return ( $startDate, $endDate );
    }

    $self->fail("Unable to determine sale dates from '$dt'.");
}

sub _isValidSaleRecord {
    my $self = shift;

    return $self->units || $self->price;
}

1;
