package BookPub::RDAS::Request::SaleFeedAuthCheck;

use Carp;
use Data::Dumper;

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

use lib '/app/tools/bookpub/lib';
use BookPub::POS::Sale::Feed;
use BookPub::DB::Item::POSFile;
use BookPub::POS::Tracker::File;

use base 'BookPub::RDAS::Request';

sub _validOptions {
    return ( shift->SUPER::_validOptions, 'saleFeedServiceID' );
}

sub run {
    my $self = shift;

    return $self->fetch(@_);
}

sub _getFetchObject {
    my $self = shift;
    my $url  = shift || confess;
    my $ua   = $self->userAgent;

    return RDAS::Fetcher::Mechanize::Authenticated->new(
        maxRedirect => 6,
        timeout     => 300,
        url         => $url,
        userAgent   => $ua,
    );
}

sub GetRequestObject {
    my $class     = shift;
    my $serviceID = shift;
    my %args      = @_;

    assert( $serviceID, "Service ID Required" );

    my %classes = (
        BookPub::Tracker::Service::BARNES_NOBLE() => BookPub::RDAS::Request::SaleFeedAuthCheck::BarnesNoble,
        BookPub::Tracker::Service::APPLE()        => BookPub::RDAS::Request::SaleFeedAuthCheck::Apple,
        BookPub::Tracker::Service::AMAZON()       => BookPub::RDAS::Request::SaleFeedAuthCheck::Amazon,
    );

    my $type = $classes{"$serviceID"};

    die "Not a valid RDAS service id: $serviceID\n" unless ($type);

    eval "use $type";
    die "$@" if ($@);

    return $type->new(%args);
}

1;
