#!/usr/bin/env perl

use strict;
use warnings;

use Getopt::Long;
use JSON::MaybeXS;
use JSON::Path;

my $USAGE = <<EOF;
usage: 
json-path <json path> < <filename>
json-path <json path> <filename>
cat <filename> | json-path <json path>
EOF

sub main {
    my $options;
    GetOptions("help|h|?" => \$options->{help});

    die $USAGE if $options->{help};
    die "too many arguments\n$USAGE"   if @ARGV > 2;
#   die "not enough arguments\n$USAGE" if @ARGV == 0;

    my $json_path = $ARGV[0] // '$.';

    my @data = $ARGV[1] ? <$ARGV[1]> : <STDIN>;
    my $json   = join "", @data;
    my @values = JSON::Path->new($json_path)->values($json);

    if (@values > 1) {
        print JSON::MaybeXS->new->canonical->pretty->encode(\@values);
    }
    elsif (ref $values[0]) {
        print JSON::MaybeXS->new->canonical->pretty->encode($values[0]);
    }
    else {
        print "\"$values[0]\"\n";
    }
}

main;

