package Data::MARC::Leader::Utils;

use strict;
use warnings;

use Class::Utils qw(set_params);
use Readonly;

Readonly::Hash our %BIBLIOGRAPHIC_LEVEL => (
	'a' => 'Monographic component part',
	'b' => 'Serial component part',
	'c' => 'Collection',
	'd' => 'Subunit',
	'i' => 'Integrating resource',
	'm' => 'Monograph/Item',
	's' => 'Serial',
);
Readonly::Hash our %CHAR_CODING_SCHEME => (
	' ' => 'MARC-8',
	'a' => 'UCS/Unicode',
);
Readonly::Hash our %DESCRIPTIVE_CATALOGING_FORM => (
	' ' => 'Non-ISBD',
	'a' => 'AACR 2',
	'c' => 'ISBD punctuation omitted',
	'i' => 'ISBD punctuation included',
	'n' => 'Non-ISBD punctuation omitted',
	'u' => 'Unknown',
);
Readonly::Hash our %ENCODING_LEVEL => (
	' ' => 'Full level',
	'1' => 'Full level, material not examined',
	'2' => 'Less-than-full level, material not examined',
	'3' => 'Abbreviated level',
	'4' => 'Core level',
	'5' => 'Partial (preliminary) level',
	'7' => 'Minimal level',
	'8' => 'Prepublication level',
	'u' => 'Unknown',
	'z' => 'Not applicable',
);
Readonly::Hash our %IMPL_DEF_PORTION_LEN => (
	'0' => 'Number of characters in the implementation-defined portion of a Directory entry',
);
Readonly::Hash our %INDICATOR_COUNT => (
	'2' => 'Number of character positions used for indicators',
);
Readonly::Hash our %LENGTH_OF_FIELD_PORTION_LEN => (
	'4' => 'Number of characters in the length-of-field portion of a Directory entry',
);
Readonly::Hash our %MULTIPART_RESOURCE_RECORD_LEVEL => (
	' ' => 'Not specified or not applicable',
	'a' => 'Set',
	'b' => 'Part with independent title',
	'c' => 'Part with dependent title',
);
Readonly::Hash our %STARTING_CHAR_POS_PORTION_LEN => (
	'5' => 'Number of characters in the starting-character-position portion of a Directory entry',
);
Readonly::Hash our %STATUS => (
	'a' => 'Increase in encoding level',
	'c' => 'Corrected or revised',
	'd' => 'Deleted',
	'n' => 'New',
	'p' => 'Increase in encoding level from prepublication',
);
Readonly::Hash our %SUBFIELD_CODE_COUNT => (
	'2' => 'Number of character positions used for a subfield code',
);
Readonly::Hash our %TYPE => (
	'a' => 'Language material',
	'c' => 'Notated music',
	'd' => 'Manuscript notated music',
	'e' => 'Cartographic material',
	'f' => 'Manuscript cartographic material',
	'g' => 'Projected medium',
	'i' => 'Nonmusical sound recording',
	'j' => 'Musical sound recording',
	'k' => 'Two-dimensional nonprojectable graphic',
	'm' => 'Computer file',
	'o' => 'Kit',
	'p' => 'Mixed materials',
	'r' => 'Three-dimensional artifact or naturally occurring object',
	't' => 'Manuscript language material',
);
Readonly::Hash our %TYPE_OF_CONTROL => (
	' ' => 'No specified type',
	'a' => 'Archival',
);
Readonly::Hash our %UNDEFINED => (
	'0' => 'Undefined',
);

our $VERSION = 0.03;

# Constructor.
sub new {
	my ($class, @params) = @_;

	# Create object.
	my $self = bless {}, $class;

	# Process parameters.
	set_params($self, @params);

	return $self;
}

sub desc_bibliographic_level {
	my ($self, $level_code) = @_;

	return $BIBLIOGRAPHIC_LEVEL{$level_code};
}

sub desc_char_coding_scheme {
	my ($self, $char_coding_scheme) = @_;

	return $CHAR_CODING_SCHEME{$char_coding_scheme};
}

sub desc_descriptive_cataloging_form {
	my ($self, $descriptive_cataloging_form) = @_;

	return $DESCRIPTIVE_CATALOGING_FORM{$descriptive_cataloging_form};
}

sub desc_encoding_level {
	my ($self, $encoding_level) = @_;

	return $ENCODING_LEVEL{$encoding_level};
}

sub desc_impl_def_portion_len {
	my ($self, $impl_def_portion_len) = @_;

	return $IMPL_DEF_PORTION_LEN{$impl_def_portion_len};
}

sub desc_indicator_count {
	my ($self, $indicator_count) = @_;

	return $INDICATOR_COUNT{$indicator_count};
}

sub desc_length_of_field_portion_len {
	my ($self, $length_of_field_portion_len) = @_;

	return $LENGTH_OF_FIELD_PORTION_LEN{$length_of_field_portion_len};
}

sub desc_multipart_resource_record_level {
	my ($self, $multipart_resource_record_level) = @_;

	return $MULTIPART_RESOURCE_RECORD_LEVEL{$multipart_resource_record_level};
}

sub desc_starting_char_pos_portion_len {
	my ($self, $starting_char_pos_portion_len) = @_;

	return $STARTING_CHAR_POS_PORTION_LEN{$starting_char_pos_portion_len};
}

sub desc_status {
	my ($self, $status_code) = @_;

	return $STATUS{$status_code};
}

sub desc_subfield_code_count {
	my ($self, $subfield_code_count) = @_;

	return $SUBFIELD_CODE_COUNT{$subfield_code_count};
}

sub desc_type {
	my ($self, $type_code) = @_;

	return $TYPE{$type_code};
}

sub desc_type_of_control {
	my ($self, $type_of_control) = @_;

	return $TYPE_OF_CONTROL{$type_of_control};
}

sub desc_undefined {
	my ($self, $undefined) = @_;

	return $UNDEFINED{$undefined};
};

1;

__END__