package BookPub::POS::Import::Factory;

use strict;

use lib '/app/tools/sale_import/lib';
use lib '/app/tools/common/lib';
use lib '/app/tools/bookpub/lib';
use BookPub::Tracker::Service;
use Common::Assert;
use Common::Log;

# hashref of Importer subclasses keyed by service_id, version_num
# example $package_for->{$service_id}->{$version_num};
my $package_for = {
    BookPub::Tracker::Service::APPLE() => {
        1 => "BookPub::POS::Import::Importer::Apple::Version1",
    },
    BookPub::Tracker::Service::BARNES_NOBLE() => {
        1 => "BookPub::POS::Import::Importer::BarnesNoble::Version1",
    },
    BookPub::Tracker::Service::AMAZON() => {
        1 => "BookPub::POS::Import::Importer::Amazon::Version1",
    },
};

sub GetImporter {
    my %args = @_;

    assert( $args{service_id} );
    assert( $args{version_num} );

    my $pkg = $package_for->{ $args{service_id} }->{ $args{version_num} };
    if ( !defined $pkg ) {
        Common::Log::Print( "!!! No Importer package found for service " . $args{service_id} . ", version " . $args{version_num} );
        return;
    }

    local $@;
    my $newObj = eval "require $pkg; $pkg->new(\%args);";
    die $@ if $@;

    return $newObj;
}

sub GetImporters {
    my $serviceID = shift || return;
    return $package_for->{$serviceID};
}

###
1;    # Play nicely.
###
