#!/usr/bin/pugs

=head1 NAME

k_manip - Kontent command-line page hierarchy manipulation tool

=head1 SYNOPSIS

	./k_manip show /path/to[14]/page
	./k_manip list /path/to/page
	./k_manip revise /path/to/page rev:log='log message' rev:author=/users/someone class:attr=value
	./k_manip create /path/to page rev:log='log message' rev:author=/users/someone class:attr=value

=head1 DESCRIPTION

k_manip is a command-line tool for manipulating Kontent sites.  It can be used 
to create and revise pages, dump their attributes, and list their children.

=head1 SEE ALSO

L<WWW::Kontent>

=cut

my($op, $path, @args)=*@ARGS;

use WWW::Kontent;
my $root = WWW::Kontent::get_root();

my $request  = WWW::Kontent::Request.new(:root($root), :path($path), :parameters({}));
my $revision = $request.path.resolve($root);
my $page     = $request.page;

given $op {
	when 'show' {
		say "Revision $revision.revno() of $path:";
		say sprintf '    %-16s %s', "$_:", $revision.attributes(){$_}
			for $revision.attributes.keys;
	}
	when 'list' {
		say "Children of $path:";
		say "    $_" for $page.children();
	}
	
	when 'revise' | 'create' {
		my $draft;
		if $op eq 'create' {
			my $name=shift @args;
			$draft=$revision.create($name);
			$draft=$draft.draft_revision;
		}
		else {
			$draft=$revision.revise($revision.revno + 1);
		}
		
		for @args -> $arg {
			$arg ~~ m/^(<[a..z0..9:]>+)=(.*)$/ or warn "No match on argument '$arg'" and next;
			my($name, $value) = ~<< ($0, $1);
			$draft.attributes{$name}=$value;
		}
		
		say "Draft revision $draft.revno() of $path:";
		say sprintf '    %-16s %s', "$_:", $draft.attributes{$_}
			for $draft.attributes.keys;

		print "Would you like to commit this draft? [y/n] ";
		if readline($*IN) ~~ m:i/y/ {
			$draft.commit;
			say "Draft committed.";
		}
		else {
			say "Draft discarded.";		
		}
	}
}