use strict;
use warnings;
use LWP::UserAgent;
use JSON::MaybeXS;

my $ua = LWP::UserAgent->new;
$ua->cookie_jar({});

sub request_json {
    my ($opts) = @_;
    my $req = HTTP::Request->new;
    $req->method($opts->{method} or "GET");
    $req->uri("http://localhost:3000$opts->{uri}");
    $req->header(Accept => "application/json");
    $req->header(Referer => "http://localhost:3000/") if $opts->{method} eq "POST";
    $req->content(encode_json($opts->{data})) if defined $opts->{data};
    my $res = $ua->request($req);
    print $res->as_string();
    return $res;
}

my $result = request_json({
  uri => "/login",
  method => "POST",
  data => {
    username => "root",
    password => "foobar"
  }
});

$result = request_json({
  uri => '/project/sample',
  method => 'PUT',
  data => {
    displayname => "Sample",
    enabled => "1",
    visible => "1",
  }
});

$result = request_json({
  uri => '/jobset/sample/default',
  method => 'PUT',
  data => {
    nixexprpath => "default.nix",
    nixexprinput => "my-src",
    inputs => {
      "my-src" => {
        type => "path",
        value => "/run/jobset"
      }
    },
    enabled => "1",
    visible => "1",
    checkinterval => "5",
    keepnr => 1
  }
});