package Sale::Match;

use strict;

#use warnings;

use Encode qw(encode_utf8);

use lib '/app/tools/sale_import/lib';

use lib '/app/tools/common/lib';
use Common::Util qw(clean word_containment);
use Common::RSDB;
use Common::Assert;
use Common::RSApp;

use lib '/app/tools/data_classes/lib';
use Client::Client;

#use Product::ProductAlbum; # require'd in MakeMatch

use lib '/app/tools/rps/lib/';
use RPS::DB::Item::Product;
use RPS::DB::Item::MediaType;

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

use constant DEBUG => 0;

use constant NP      => 0;
use constant NOMATCH => 1;
use constant ISMATCH => 2;

use constant SUGGEST => 'suggest';
use constant MATCH   => 'match';

use constant STATUS_MATCH         => 1;
use constant STATUS_NOMATCH       => 2;
use constant STATUS_MULTIMATCH    => 3;
use constant STATUS_MAPPED        => 4;
use constant STATUS_UNRECOVERABLE => 5;
use constant STATUS_AUTO_MAPPED   => 6;
use constant STATUS_BATCH_MAPPED  => 7;
use constant STATUS_DONT_MATCH    => 8;

use constant LIMIT_SEARCH => 100;

# !!! JPK - Putting the constructor in here for now.
# This really needs to be converted to use the inherited _init() model.
#

sub new {
    my ( $class, %args ) = @_;

    assert($class);

    my $clientID = Common::RSApp::GetClientID();
    my $codename = Client::Client->CodeName($clientID);

    if ($codename) {

        # See if there is a subclass declared.
        #
        my $pkg = $class . '::' . $codename;
        eval "require $pkg";
        if ( !$@ ) {
            $class = $pkg;
        }
    }

    my $self = bless {}, $class;
    return $self->_init(%args);
}

sub _init {
    my ( $self, %args ) = @_;

    if ( $args{map_type} && $args{map_type} eq "auto" ) {
        $self->{map_type} = STATUS_AUTO_MAPPED;
    } elsif ( $args{map_type} && $args{map_type} eq "batch" ) {
        $self->{map_type} = STATUS_BATCH_MAPPED;
    } else {
        $self->{map_type} = STATUS_MAPPED;
    }

    # !!! waste of time
    $self->{album_tt} = {};
    $self->{track_tt} = {};

    return $self;
}

1;
