package RPS::Import::MacBlk::v3;

use strict;
use warnings;

use parent 'RPS::Import::MacBlk::v1';

sub _fieldMapExtended {
    {
        digital => {
            option1 => {
                labelName    => 'J',
                serviceID    => 'O',
                countryCode  => 'D',
                dateBegin    => 'K',
                formatType   => 'O',    # there is _extra_format_type mapping below
                artistName   => 'B',
                upc          => 'R',
                isrc         => 'I',
                trackName    => 'Q',
                units        => 'T',
                currencyCode => 'E',
                price        => 'S',
            },
         },
    };
}

sub _unverifiedFieldMapExtended {
    {
        digital => {
            option1 => {
                _release_title     => 'N',
                _extra_format_type => 'G',
            },
        },
    };
}

sub formatType {
    my $self = shift;

    my $service   = $self->_getByFieldName('serviceID')          || '';
    my $extraType = $self->_getByFieldName('_extra_format_type') || '';

    if ( $service =~ /^pnd-pandora$/i ) {
        if ( $extraType =~ /^(?:LimitedInteractiveStream|PremiumAccessStream|OnDemandStream)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        } elsif ( $extraType =~ /^(?:NonInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_PERFORMANCE;
        }
    }

    if ( $service =~ /^tunecore$/i ) {
        if ( $extraType =~ /^(?:Streaming)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        } elsif ( $extraType =~ /^(?:Download)$/i ) {
            return RPS::File::Sale::FORMAT_DOWNLOAD;
        }
    }

    if ( $service =~ /^(?:ncm-netease-cloud-music-add|tiktok-add|tiktok-cap|fbk-facebook-al|fbk-facebook-ugc|spo-spotify-discovery-mode-fee|joo-joox)$/i ) {
        return RPS::File::Sale::FORMAT_STREAM;
    }

    if ( $service =~ /^audible-magic$/i ) {
        if ( $extraType =~ /^(?:Download)$/i ) {
            return RPS::File::Sale::FORMAT_DOWNLOAD;
        }
    }

    if ( $service =~ /^pnd-pandora-fam$/i ) {
        if ( $extraType =~ /^(?:NonInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_PERFORMANCE;
        } elsif ( $extraType =~ /^(?:OnDemandStream|PremiumAccessStream|LimitedInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^pnd-pandora-t2$/i ) {
        if ( $extraType =~ /^(?:NonInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_PERFORMANCE;
        } elsif ( $extraType =~ /^(?:OnDemandStream|LimitedInteractiveStream|PremiumAccessStream)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^pnd-pandora-t1$/i ) {
        if ( $extraType =~ /^(?:NonInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_PERFORMANCE;
        } elsif ( $extraType =~ /^(?:OnDemandStream|LimitedInteractiveStream|PremiumAccessStream)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^pnd-pandora-t3$/i ) {
        if ( $extraType =~ /^(?:NonInteractiveStream)$/i ) {
            return RPS::File::Sale::FORMAT_PERFORMANCE;
        } elsif ( $extraType =~ /^(?:LimitedInteractiveStream|OnDemandStream|PremiumAccessStream)$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^aum-audiomack$/i ) {
        if ( $extraType =~ /^free|Subscription$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^tbo-taobao$/i ) {
        if ( !$extraType ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^capcut$/i ) {
        if ( $extraType =~ /^PGC$/i ) {
            return RPS::File::Sale::FORMAT_STREAM;
        }
    }

    if ( $service =~ /^iht-iheart-add$/i ) {
        return RPS::File::Sale::FORMAT_PERFORMANCE;
    }

    return $self->SUPER::formatType();
}

sub _isValidSaleRecord {
    my $self = shift;

    my $service = $self->_getByFieldName("serviceID");

    return (defined $self->units || defined $self->price) && $service;
}


1;
