package RPS::Import::FatBeats::v3;

use strict;
use warnings;

use lib '/app/tools/rps/lib';
use base 'RPS::Import::FatBeats::v2';

sub physical { 2 }

sub _fieldMapExtended {
    {
        physical => {
            option1 => {
                countryCode     => 'H',
                productType     => 'D',
                clientProductID => 'C',
                artistName      => 'D',
                upc             => 'E',
                albumName       => 'D',
                retailPrice     => 'K',
                totalRevenue    => 'M',
            },
        },
    };
}

sub _unverifiedFieldMapExtended {
    {
        physical => {
            option1 => {
                _netUnits        => 'L',
                _itemDescription => 'D',
            },
        }
    };
}

sub _headerIdentifierExtended {
    {
        physical => {
            option1 => {
                productType => 'Item Description',
            },
        },
    };
}

sub saleDates {
    my $self = shift;

    # 06/01/18 - 07/31/18 on the Summary sheet
    # 6/01/18 - 7/31/2018
    return @{ $self->{_datesPeriod} } if exists $self->{_datesPeriod};

    if ( exists $self->{_period} && $self->{_period} =~ /^(\d{1,2})\/(\d{2})\/(\d{2,4})\s+\-\s+(\d{1,2})\/(\d{2})\/(\d{2,4})$/i ) {
        my $year_begin = length($3) > 2 ? "20".$3 : $3;
        my $year_end   = length($6) > 2 ? "20".$6 : $6;

        $self->{_datesPeriod} = [
            $self->_getDates(
                date_begin => sprintf( "%04d-%02d-%02d", $year_begin, $1, $2 ),
                date_end   => sprintf( "%04d-%02d-%02d", $year_end, $4, $5 )
            )
        ];
    }

    return @{ $self->{_datesPeriod} } if exists $self->{_datesPeriod};
}

sub productType {
    my $self = shift;

    my $type = $self->_getFromItemDescription('productType') || "";
    if ( $type =~ /^(?:CD|EP)$/i ) {
        return RPS::File::Sale::TYPE_CD;
    } elsif ( $type =~ /^(?:LP|Splatter Vinyl EP|White w\/ Purple Swirl EP|6x7(?:"|''|"") Box Set)$/i ) {
        return RPS::File::Sale::TYPE_LP;
    } elsif ( $type =~ /^(?:10(?:"|')(?:"|')? Vinyl EP|12(?:"|''|"")|2XLP(?: White Vinyl)?)$/i ) {
        return RPS::File::Sale::TYPE_LP5;
    }

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

sub artistName { $_[0]->_getFromItemDescription('artistName') }
sub albumName  { $_[0]->_getFromItemDescription('albumName') }

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

    my $sheetname = $self->{sheetname};
    # get a sales period from the 'C15' cell on the summary sheet
    $self->{_period} = $sheet->[14][2] if $sheetname =~ /^summary$/i;

    return $self->SUPER::_processSheet($sheet, $sheetnum) if $sheetname =~ /^sales$/i;
}

sub _getFromItemDescription {
    my ($self, $type) = @_;

    my $cachedKey = "___" . $self->linenum . "_description";
    if ( exists $self->{$cachedKey} && exists $self->{$cachedKey}{$type} ) {
        return $self->{$cachedKey}{$type};
    }

    # example: "GrandeMarshall - Risk/Reward (CD)" OR "Fool's Gold Presents: Night Shift (CD)"
    my $value = $self->_getByFieldName('_itemDescription') || '';

    my @parts = ($value =~ /^(.+?)[-:](.+)$/);

    unshift @parts, undef if @parts == 1;
    @parts[1,2] = $parts[1] =~ /^(.+)\s?\((.+)\)$/;

    s/^\s+|\s+$//g for (@parts);
    @{ $self->{$cachedKey} }{ qw/artistName albumName productType/ } = @parts;

    return $self->{$cachedKey}{$type};
}


1;
