#------------------------------------------------------------
# Copyright (C) 2009 RoyaltyShare, Inc.   All Rights Reserved
#------------------------------------------------------------
package Distribution::Test::Command::Delivery;
use strict;
use warnings;

use Data::Dumper;
use File::Basename;

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

use lib '/app/tools/rps/lib';

use lib '/app/tools/distribution/lib';

use base 'Distribution::Test::Command';

sub _album_id_config_name { 'test_delivery_album_ids' }

sub _init {
    my $self = shift;
    my %args = @_;

    $self->SUPER::_init(@_);

    $self->{_skipValidation} = $args{skip_validation};

    assert( $self->{_serviceID}, "Service ID Required" );

    return $self;
}

sub _packageCompareOptions {
    ( ignore_missing => 1, ignore_extra => 1 );
}

sub _test {
    my $self    = shift;
    my $service = shift;

    if (   $self->_buildPackage($service)
        && ( $self->{_skipValidation} || $self->_testPackage($service) )
        && $self->_deliver($service)
        && $self->_cleanup($service) ) {

        $self->log("Package delivery successfully!");
        return 1;
    } else {
        $self->{_noClean} = 1;
        $self->log("****** Package delivery failed ******");
        return;
    }

}

sub _deliver {
    my $self       = shift;
    my $service    = shift;
    my $service_id = $service->service_id;
    my $client_id  = Common::RSApp::GetClientID();

    $self->log("  + Starting delivery test");

    my $dir      = "$self->{_testOutputBase}/$service_id/$client_id";
    my $base_dir = "$dir/" . $self->_getFirstDir($dir);

    my $package_dir = $self->_getFirstDir($base_dir);

    $self->log("    - DIR: $base_dir");
    $self->log("    - PACKAGE: $package_dir");

    assert( $self->{_distProcessID} );
    my $process = Distribution::DistributionProcess->new( distributionProcessID => $self->{_distProcessID} );
    $process->enqueueDeliveryTest( base_dir => $base_dir, package => $package_dir, client_id => $client_id );

    return $self->_runJob($service);
}

sub _getFirstDir {
    my $self = shift;
    my $dir  = shift;

    $self->log("    - Opening dir: $dir");

    opendir( DIR, $dir ) || die "can't opendir $dir: $!";
    my @files = readdir(DIR);
    closedir DIR;

    foreach my $file (@files) {
        $self->log("        + File: $file");

        if ( $file !~ /^\./ && -d "$dir/$file" ) {
            return $file;
        }
    }

    return;
}

1;
