package RDAS::Fetcher;

use File::Basename;

use lib '/app/tools/rdas/lib';
use base 'RDAS::RDAS';

sub _validOptions {
    qw( url cached cacheExpire );
}

sub content {
    my $self = shift;

    return $self->{_content} if ( $self->{_content} );

    unless ( $self->fetchCached() ) {
        $self->fetch() unless ( $self->{_content} );
        $self->storeCache() if ( $self->cached() );
    }

    return $self->{_content};
}

sub success   { shift->{_success} }
sub errorCode { shift->{_errorCode} }

sub fetch { die "Must be overloaded" }

sub fetchCached {
    my $self = shift;

    return unless ( $self->cached() );

    my $file = $self->_cacheFilename() || return;

    return unless ( -r $file );

    my $mtime = ( stat($file) )[9];

    return unless ( $mtime && time - $mtime < $self->cacheExpire );

    open( INFILE, "$file" ) || die "Failed to open file: $file";
    my @lines = <INFILE>;
    close(INFILE);

    Common::Log::Debug("Pulling results from cache: $file");
    $self->{_content} = "@lines";

    return 1;
}

sub storeCache {
    my $self = shift;

    return unless ( $self->cached() );
    return unless ( $self->{_content} );

    my $file = $self->_cacheFilename() || return;

    Common::Log::Debug("Storing cache: $file");

    open( OUTFILE, ">$file" ) || die "Failed to open file: $file";
    print OUTFILE "$self->{_content}";
    close(OUTFILE);
}

sub _cacheFilename {
    my $self = shift;

    my $path = "/tmp/" . basename($0) . ".cache";
}

sub cacheExpire {
    my $self = shift;

    return $self->{_cacheExpire} ? $self->{_cacheExpire} : 60 * 60 * 24;
}

1;
