package OpenILS::Application::Storage::Publisher::config;
use base qw/OpenILS::Application::Storage/;
use OpenILS::Application::Storage::CDBI::config;


sub retrieve_all {
	my $self = shift;
	my $client = shift;

	$self->api_name =~ /direct\.config\.(.+)\.retrieve/o;
	
	my $class = 'config::'.$1;
	for my $rec ( $class->retrieve_all ) {
		$client->respond( $rec->to_fieldmapper );
	}

	return undef;
}

for my $class (
		qw/metabib_field standing identification_type copy_status
		   non_cataloged_type audience_map item_form_map item_type_map
		   language_map lit_form_map bib_source net_access_level/ ) {

	__PACKAGE__->register_method(
		method		=> 'retrieve_all',
		api_name	=> "open-ils.storage.direct.config.$class.retrieve.all",
		argc		=> 0,
		stream		=> 1,
	);
}


# XXX arg, with the descendancy SPs...
sub ranged_config_non_cat {
	my $self = shift;
	my $client = shift;
	my @binds = @_;

	my $ctable = config::non_cataloged_type->table;

	my $descendants = defined($binds[1]) ?
		"actor.org_unit_full_path(?, ?)" :
		"actor.org_unit_full_path(?)" ;


	my $sql = <<"	SQL";
		SELECT	DISTINCT c.*
		  FROM	$ctable c
		  	JOIN $descendants d
				ON (d.id = c.owning_lib)
	SQL

	my $sth = config::non_cataloged_type->db_Main->prepare($sql);
	$sth->execute(@binds);

	while ( my $rec = $sth->fetchrow_hashref ) {

		my $cnct = new Fieldmapper::config::non_cataloged_type;
		$cnct->name($rec->{name});
		$cnct->owning_lib($rec->{owning_lib});
		$cnct->id($rec->{id});
		$cnct->circ_duration($rec->{circ_duration});
		$cnct->in_house($rec->{in_house});

		$client->respond( $cnct );
	}

	return undef;
}
__PACKAGE__->register_method(
	method		=> 'ranged_config_non_cat',
	api_name	=> 'open-ils.storage.ranged.config.non_cataloged_type.retrieve',
	argc		=> 1,
	stream		=> 1,
	notes		=> <<"	NOTES",
		Returns 
	NOTES
);

1;
