#!/usr/bin/perl

use EPrints;
use strict;

# If this gets switched to 1 at any point in the script then an error has occured.
my $error_flag = 0;

my $session = new EPrints::Session;
Apache::exit( 0 ) unless( defined $session );

my $current_user = $session->current_user();

if(!defined $current_user){ 
	print $session->phrase("sneep_not_logged_in");
	exit;
}


my $eprintid = $session->param("eprintid");
my $from_javascript = $session->param("callback");

my $eprint = EPrints::DataObj::EPrint->new($session, $eprintid, $session->get_repository->get_dataset("eprint"));
if(!defined $eprint){
	print $session->phrase("sneep_not_an_eprint");
	exit;
}


my $title = $session->param( "title" );
my $content = $session->param( "content" );
my $type = $session->param( "type" );

if( !defined $content || $content eq "" )
{
	my $message = $session->phrase( 'sneep_content_required', type=>$type );
	render_error_response( $from_javascript, $message, $session );
}

my $data = { type=>$type, title=>$title, content=>$content, datestamp=>EPrints::Time::get_iso_timestamp(), lastmod=>EPrints::Time::get_iso_timestamp(), userid=>$current_user->get_id(), eprintid=>$eprint->get_id(), eprint_owner=>$eprint->get_user()->get_id() };

my $sneep_ds = $session->get_repository()->get_dataset("sneep");

my $new_sneep = EPrints::DataObj::Sneep->create_from_data($session, $data, $sneep_ds);
$new_sneep->commit;

render_response($from_javascript, $type, $new_sneep, $session);

sub render_response
{
	my( $from_javascript, $type, $sneep, $session ) = @_;

	if ( $from_javascript == "1" )
	{
		$session->get_request->content_type("application/json");
		$session->get_request->headers_out->{'Cache-control'} = 'No-cache';
		if($sneep->can_edit){
			print "{ 'status': 1, 'content': '".EPrints::XML::to_string($sneep->render_citation('editable'), undef, 1)."' }";
		}else{
			print "{ 'status': 1, 'content': '".EPrints::XML::to_string($sneep->render_citation, undef, 1)."' }";
		}
	}
	else
	{
		my $cgi_url = $session->get_repository()->get_conf("perl_url");
		$session->redirect($cgi_url."/sneep/sneep_page?eprintid=".$eprint->get_id."&type=".$type);
	}

	$session->terminate;
	exit;
}

sub render_error_response
{
	my( $from_javascript, $message, $session ) = @_;

	if( $from_javascript == "1" )
	{
		$session->get_request->content_type( 'application/json' );
		$session->get_request->headers_out->{ 'Cache-control' } = 'No-cache';
		print "{ status: 0, content: '$message' }";
	}

	$session->terminate;
	exit;
}
