#------------------------------------------------------------
# Copyright (C) 2006 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Support::ProductDistribution::Command::RedeliverJob;
use strict;
use warnings;

use lib '/app/tools/support/lib';
use base 'Support::Command::Submit';

use lib '/app/tools/common/lib';
use Common::Assert;
use RSApache::Response::XSLT;

use lib '/app/tools/rps/lib';
use RPS::Catalog::AlbumSimple;
use RPS::Product::ProductDigitalWithServices;
use RPS::Product::Product;

use lib '/app/tools/distribution/lib';
use Distribution::DB::Item::DistributionProcess;

use lib '/app/tools/support/lib';
use Support::JobQueue::Command::ShowDistributionProcess;

sub cmd  { return 'redeliver_job'; }
sub area { return 'cm'; }

use constant kTemplate => "/app/tools/support/templates/cm/redeliver.xsl";

sub execute {
    my ($self) = @_;

    my $response = $self->SUPER::execute();
    return $response if $response;

    my $albumIDs = $self->getParam('AlbumID');
    my @albums = ref($albumIDs) ? @$albumIDs : ($albumIDs);

    my $distProcID = $self->getParam('DistributionJobID');

    $self->process( $distProcID, @albums ) if ( @albums && $distProcID );

    my $command = new Support::JobQueue::Command::ShowDistributionProcess();

    $command->setParam( DistributionJobID => $distProcID );

    return RSApache::Response::Redirect->new( $command->getRedirect() );
}

sub process {
    my $self       = shift;
    my $distProcID = shift;
    my @albums     = @_;
    my $dbProduct;
    my $product;

    my $serviceID = Distribution::DB::Item::DistributionProcess->LookupServiceID($distProcID);

    Common::Log::Debug("Albums: @albums");
    Common::Log::Debug("Service ID: $serviceID");

    foreach my $album_id (@albums) {
        $dbProduct = RPS::DB::Item::Product->GetDigitalAlbumProduct($album_id);
        $product = new RPS::Product::Product( _dbItem => $dbProduct );

        Common::Log::Debug( "Requeue Product: " . $product->UPC );
        $product->requeueDelivery($serviceID);
    }
}

1;
