package Admin::JobLogReader::JobLog;

use strict;
use DB_File;
use Fcntl;

use lib '/app/tools/job/lib';
use Job::Log;

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

use base 'Common::XMLObject';

use constant kLinesPerPage => 40;

sub _init {
    my ( $self, %args ) = @_;

    my $jobLogID = $args{job_log_id};
    my $page     = $args{page};

    my $logItem = Job::Log->new( jobLogID => $jobLogID );
    return unless $logItem;

    my $logPath = $logItem->path;

    return unless -f $logPath;

    # let's see how much overhead the DB_File module adds...
    #
    my @fileLines;
    my $tie = tie( @fileLines, 'DB_File', $logPath, O_RDWR, 0666, $DB_RECNO ) or die "cannot open file $logPath: $!\n";

    my $numLines = scalar @fileLines;                      # This might take a second or two...
    my $numPages = int( $numLines / kLinesPerPage ) + 1;
    $page = 1 unless $page;
    $page = $numPages if $page > $numPages;

    $self->{Log}         = $logItem;
    $self->{CurrentPage} = $page;
    $self->{MaxPage}     = $numPages;

    my $startLine = 0 + ( ( $page - 1 ) * kLinesPerPage );
    my $endLine = $startLine + kLinesPerPage;
    if ( $endLine > $numLines ) {
        $endLine = $numLines;
    }

    $self->{LogLine} = [];
    for ( my $lineNum = $startLine ; $lineNum < $endLine ; $lineNum++ ) {
        push @{ $self->{LogLine} }, $fileLines[$lineNum];
    }

    return $self;
}

1;
