#!/usr/bin/perl
use warnings;
use strict;
use LWP::Debug qw(+);
use LWP::UserAgent;
use Data::Dump qw(dump);
use utf8;

=begin eprints configuration

add to /usr/share/eprints3/archives/grf/cfg/cfg.d/user_roles.pl

$c->{user_roles}->{admin} = [qw{
	# ...
	rest
	upsert
	# ...
}];

=cut

our $repo = "http://eprints.ffzg.hr/grf";
our $user = 'admin';
our $passwd = 'XXXX';
require "config.pl";

warn "# repo: $repo [$user]\n";

my $nr;

my $ua = LWP::UserAgent->new;
$ua->credentials("eprints.ffzg.hr:80", "EPrintsREST", "admin", "grfadmin");

my @ids;
my $response = $ua->get( "$repo/rest/eprint/" );
if ($response->is_success) {
	my $html = $response->decoded_content;
#	print $html;
	@ids = grep { defined $_ } map { m{href=['"](\d+)/} && $1 || undef } split(/[\n\r]/, $html);
} else {
	die $response->status_line;
}

print "ids = ",dump(@ids),$/;

$nr = $ids[-1];

print "nr = $nr\n";

$response = $ua->get( "$repo/rest/eprint/$nr.xml" );

if ($response->is_success) {
	print "ORIG\n", $response->decoded_content;
} else {
	die "ERROR: ", $response->status_line;
}


my $xml = $response->decoded_content;  # or whatever
my $title = $1 if $xml =~ m{<title>(.+)</title>};
$title =~ s{\s*\[editirano]}{} or $title .= ' [editirano]';
my $update = $ua->request( HTTP::Request->new( 'PUT', "$repo/rest/eprint/$nr/title.txt", undef, "$title" ) );
if ($update->is_success) {
	print "UPDATE: ", $update->decoded_content;
} else {
	die "ERROR: ", $update->status_line;
}

my $old = $nr;
$nr++;
$xml =~ s{(eprint.*)$old}{$1$nr}g;

my $create = $ua->request( HTTP::Request->new( 'PUT', "$repo/rest/eprint/$nr/", [ 'Content-type' => 'text/xml' ], utf8::decode($xml) ) );
if ($create->is_success) {
	print "CREATE: ", $create->decoded_content;
} else {
	die "ERROR: ", $create->status_line, $create->decoded_content;
}

