#!/usr/bin/perl

use strict;

use lib '/app/tools/common/lib';
use Common::RSApp;

use lib '/app/tools/rps/lib';
use RPS::Sale::Match;

use lib '/app/tools/rps/lib';
use RPS::File::Sale;
use RPS::File::File;

usage() unless ( scalar @ARGV > 1 );

my $CID    = $ARGV[0];
my $app    = Common::RSApp->new( clientID => $CID );
my $saleDB = RPS::File::Sale->new( sale_id => $ARGV[1] );
die "can't find record\n" unless ( $saleDB->SaleID == $ARGV[1] );
my $fileDB = RPS::File::File->new( file_id => $saleDB->FileID );

my %data = (
    product_type       => $saleDB->ProductType,
    format             => $saleDB->FormatType,
    media_type         => $saleDB->MediaType,
    client_product_id  => $saleDB->ClientProductID,
    upc                => $saleDB->UPC,
    isrc               => $saleDB->ISRC,
    artist             => $saleDB->ArtistName,
    album              => $saleDB->AlbumName,
    track              => $saleDB->TrackName,
    track_num          => $saleDB->TrackNum,
    service_id         => $fileDB->ServiceID,
    service_product_id => $saleDB->ServiceProductID,
);

# to test alternate matching logic on a live box, change the following line to instantiate your
# alternate version of Sale::Match
my $match   = RPS::Sale::Match->new();
my $skipRec = defined $ARGV[2] ? $ARGV[2] : 1;
my $result  = $match->FindBestMatch( data => \%data, min_match_level => 70, skip_rec => $skipRec );

print "errors: " . $match->errstr . "\n";
die "no matches\n" unless $result;

if ( $result->ImportStatus == File::Sale::STATUS_MATCH ) {
    print 'single match: ';
} elsif ( $result->ImportStatus == File::Sale::STATUS_MAPPED ) {
    print 'mapped match->' . $result->MapID . ': ';
} elsif ( $result->ImportStatus == File::Sale::STATUS_AUTO_MAPPED ) {
    print 'auto mapped match->' . $result->MapID . ': ';
} elsif ( $result->ImportStatus == File::Sale::STATUS_BATCH_MAPPED ) {
    print 'batch mapped match->' . $result->MapID . ': ';
} elsif ( $result->ImportStatus == File::Sale::STATUS_MULTIMATCH ) {
    print 'multi match: ';
}

print join( ',', $result->ProductIDs ) . "\n";

print "\nrecommended:\n";
print join( ',', $result->RecProductIDs ) . "\n";

sub usage {
    die "usage: $0 CLIENT_ID SALE_ID [skip_rec (1|0)]\n";
}
