use strict;
use warnings;
use Setup;
use File::Temp;

my $ctx = test_context();
my $db = $ctx->db();

require Hydra::Helper::Nix;

use Test2::V0;

my $dir = File::Temp->newdir();
my $machines = "$dir/machines";

$ENV{'NIX_REMOTE_SYSTEMS'} = $machines;

open(my $fh, '>', $machines) or die "Could not open file '$machines' $!";
print $fh q|
# foobar
root@ip x86_64-darwin /sshkey 15 15 big-parallel,kvm,nixos-test - base64key

# Macs
# root@bar x86_64-darwin /sshkey 6 1 big-parallel
root@baz aarch64-darwin /sshkey 4 1 big-parallel

root@bux i686-linux,x86_64-linux /var/sshkey 1 1 kvm,nixos-test benchmark
root@lotsofspace    i686-linux,x86_64-linux    /var/sshkey   1   1  kvm,nixos-test   benchmark

|;
close $fh;

is(Hydra::Helper::Nix::getMachines(), {
    'root@ip' => {
        'systemTypes' => ["x86_64-darwin"],
        'sshKeys' => '/sshkey',
        'maxJobs' => 15,
        'speedFactor' => 15,
        'supportedFeatures' => ["big-parallel", "kvm", "nixos-test" ],
        'mandatoryFeatures' => [ ],
    },
    'root@baz' => {
        'systemTypes' => [ "aarch64-darwin" ],
        'sshKeys' => '/sshkey',
        'maxJobs' => 4,
        'speedFactor' => 1,
        'supportedFeatures' => ["big-parallel"],
        'mandatoryFeatures' => [],
    },
    'root@bux' => {
        'systemTypes' => [ "i686-linux", "x86_64-linux" ],
        'sshKeys' => '/var/sshkey',
        'maxJobs' => 1,
        'speedFactor' => 1,
        'supportedFeatures' => [ "kvm", "nixos-test", "benchmark" ],
        'mandatoryFeatures' => [ "benchmark" ],
    },
    'root@lotsofspace' => {
        'systemTypes' => [ "i686-linux", "x86_64-linux" ],
        'sshKeys' => '/var/sshkey',
        'maxJobs' => 1,
        'speedFactor' => 1,
        'supportedFeatures' => [ "kvm", "nixos-test", "benchmark" ],
        'mandatoryFeatures' => [ "benchmark" ],
    },

}, ":)");

subtest "constructRunCommandLogPath" => sub {
    my $builds = $ctx->makeAndEvaluateJobset(
        expression => "basic.nix",
    );
    my $build = $builds->{"empty_dir"};
    my $runlog = $db->resultset('RunCommandLogs')->create({
        job_matcher => "*:*:*",
        build_id => $build->get_column('id'),
        command => "bogus",
    });

    like(
        Hydra::Helper::Nix::constructRunCommandLogPath($runlog),
        qr@/runcommand-logs/[0-9a-f]{2}/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}@,
        "The constructed RunCommandLog path is sufficiently bucketed and UUID-like."
    );

    my $badlog = $db->resultset('RunCommandLogs')->new({ uuid => "../../../etc/passwd" });
    ok(
        dies { Hydra::Helper::Nix::constructRunCommandLogPath($badlog) },
        "Expected invalid UUID to be rejected and not have a path constructed for it.",
    );
};

done_testing;