package App::Glacier::Job::FileRetrieval;
use strict;
use warnings;

require App::Glacier::Job::ArchiveRetrieval;
use parent qw(App::Glacier::Job::ArchiveRetrieval);
use App::Glacier::Core;
use Carp;

# new(CMD, VAULT, FILE[, VERSION])
sub new {
    croak "bad number of arguments" if $#_ < 3 || $#_ > 4;
    my ($class, $cmd, $vault, $file, $version) = @_;

    my $dir = $cmd->directory($vault);
    unless ($dir) {
	$cmd->abend(EX_TEMPFAIL,
		    "nothing is known about vault $vault; please get directory listing first");
    }
    my $archive;
    ($archive, $version) = $dir->locate($file, $version);
    unless ($archive) {
	$version = 1 unless defined $version;
	$cmd->abend(EX_NOINPUT,
		    "$vault:$file;$version not found; make sure directory listing is up-to-date");
    }
    
    my $self = $class->SUPER::new($cmd, $vault, $archive->{ArchiveId},
				  description => "Retrieval of $file;$version",
				  ttl => $cmd->cfget(qw(database job ttl)));
    $self->{_filename} = $file;
    $self->{_fileversion} = $version;
    return $self;
}

sub file_name {
    my ($self, $full) = @_;
    if ($full) {
	return $self->{_filename} . ';' . $self->{_fileversion};
    } else {
	return $self->{_filename};
    }
}

sub file_version {
    my ($self) = @_;
    return $self->{_fileversion};
}

1;