#!perl

use EPrints;

use strict;

my $eprints = EPrints->new;
my $repo = $eprints->current_repository;
exit( 0 ) if !defined $repo;

# security?

$repo->send_http_header( content_type=>"text/xml; charset=UTF-8" );
my $q = $repo->param( "q" );
# also _title, _id, dataset=XX, field=XX, dataobj=XX

my $dataset = $repo->dataset( $repo->param( "dataset" ) );
EPrints->abort("invalid dataset") if !defined $dataset;
my $field = $dataset->field( $repo->param( "field" ) );
EPrints->abort("invalid field") if !defined $field;

EPrints->abort("not itemref") if !$field->isa( "EPrints::MetaField::Dataobjref" );

my $tdataset = $repo->dataset( $field->get_property( "datasetid" ) );

my $processor = EPrints::ScreenProcessor->new(
	session => $repo,
	dataset => $tdataset,
	screenid => "Search",
	searchid => "simple",
);


$processor->screen->properties_from;

if( !$processor->screen->can_be_viewed )
{
	$repo->get_request->status( EPrints::Const::HTTP_FORBIDDEN );
	exit; 
}

# override the settings from Screen::Search
$processor->{sconf}->{keep_cache} = 0;
$processor->{sconf}->{limit} = 10;
$processor->{sconf}->{satisfy_all} = 0;

$processor->screen->from;

my $results = $processor->{results};

my @rows;
foreach my $match ($results->slice(0, 10))
{
	my $item = {};
	push @rows, $item;

	my $frag = $repo->xml->create_document_fragment;
	my $desc = $match->render_description;
	$frag->appendChild( $desc );

	$item->{xhtml} = $frag;
	$item->{values} = [
		"for:value:relative:_id" => $match->id,
	];
	foreach my $sub_field (@{$field->property( "fields_cache" )})
	{
		my $name = $sub_field->property( "sub_name" );
		next if $name eq "id";
		my $field = $tdataset->field( $name );
		next if !defined $field;
		if( $field->isa( "EPrints::MetaField::Name" ) )
		{
			my $value = $match->value( $name );
			push @{$item->{values}},
				"for:value:relative:_${name}_family" => $value->{family},
				"for:value:relative:_${name}_given" => $value->{given},
				"for:value:relative:_${name}_honourific" => $value->{honourific},
				"for:value:relative:_${name}_lineage" => $value->{lineage},
		}
		else
		{
			push @{$item->{values}},
				"for:value:relative:_$name" => $match->value( $name );
		}
	}
}

my $ul = EPrints::Extras::render_lookup_list( $repo, \@rows );

binmode(STDOUT,":utf8");
print <<END;
<?xml version="1.0" encoding="UTF-8" ?>

END
print EPrints::XML::to_string( $ul, "utf-8", 1 );

EPrints::XML::dispose( $ul );
