package Hydra::View::NixLog;

use strict;
use warnings;
use base qw/Catalyst::View/;
use Hydra::Helper::CatalystUtils;

sub process {
    my ($self, $c) = @_;

    my $logPath = $c->stash->{logPath};

    $c->response->content_type('text/plain; charset=utf-8');

    my $fh = IO::Handle->new();

    my $tail = int($c->stash->{tail} // "0");

    if ($logPath =~ /\.zst$/) {
        my $doTail = $tail ? "| tail -n '$tail'" : "";
        open($fh, "-|", "zstd -dc < '$logPath' $doTail") or die;
    } elsif ($logPath =~ /\.bz2$/) {
        my $doTail = $tail ? "| tail -n '$tail'" : "";
        open($fh, "-|", "bzip2 -dc < '$logPath' $doTail") or die;
    } else {
        if ($tail) {
            open($fh, "-|", "tail -n '$tail' '$logPath'") or die;
        } else {
            open($fh, "<", $logPath) or die;
        }
    }
    binmode($fh);

    setCacheHeaders($c, 365 * 24 * 60 * 60) if $c->stash->{finished};

    $c->response->body($fh);

    return 1;
}

1;
