<?PHP
/**
 * Contains a class for building the list of available fields.
 *
 * @author Joshua Ramon Enslin <joshua@museum-digital.de>
 */
declare(strict_types = 1);

/**
 * Class building the list of available fields for CSVXML.
 */
final class CsvxmlAvailableFields {

    /** @var array<mixed> */
    private array $_availableFields;

    /**
     * Getter for available fields.
     *
     * @return array<mixed>
     */
    public function getFields():array {

        return $this->_availableFields;

    }

    /**
     * Function for getting a simple array definition of an available field.
     *
     * @param string  $nameTL        Translation of the field name. Optional.
     * @param string  $explica       Explanation of the field (from musdb). Optional.
     * @param array   $dependsOn     Dependent fields. Optional.
     * @param array   $allowedValues Allowed values. Optional.
     * @param string  $remark        Explanation of the field (for importer). Optional.
     * @param boolean $required      Determines whether the field is required. Defaults
                                     to false.
     *
     * @return array
     */
    private function _getSimpleAvailableFieldEntry(string $nameTL = "", string $explica = "", array $dependsOn = [], array $allowedValues = [], string $remark = "", bool $required = false):array {
        return [
                "required"            => $required,
                "allowedValues"       => $allowedValues,
                "dependsOn"           => $dependsOn,
                "remark"              => $remark,
                "name_human_readable" => $nameTL,
                "explica"             => $explica,
        ];

    }

    /**
     * Function for building a generic event type definition.
     *
     * @param string[]   $event    Translation variable.
     * @param MDTlLoader $tlLoader Translation loader.
     * @param string     $typeName Translated name of event type.
     * @param string     $type     Event type name (e.g. production).
     * @param integer    $number   Number of event of this type.
     *
     * @return array
     */
    private function _generateGenericFullEvent(array $event, MDTlLoader $tlLoader, string $typeName, string $type, int $number):array {

        return [
            "{$type}_when{$number}"         => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['when']}", "", ["{$type}_when_sure{$number}"]),
            "{$type}_when_sure{$number}"    => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['when']} [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", ["{$type}_when{$number}"], ["y", "n"]),
            "{$type}_who{$number}"          => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['who']}", "", ["{$type}_who_sure{$number}"]),
            "{$type}_who_sure{$number}"     => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['who']} [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", ["{$type}_who{$number}"], ["y", "n"]),
            "{$type}_who_gnd{$number}"      => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['who']} ({$event['gnd']})", "", ["{$type}_who_sure{$number}", "{$type}_who{$number}"]),
            "{$type}_where{$number}"        => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['where']}", "", ["{$type}_where_sure{$number}"]),
            "{$type}_where_sure{$number}"   => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['where']} [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]", "", ["{$type}_where{$number}"], ["y", "n"]),
            "{$type}_annotation{$number}"   => $this->_getSimpleAvailableFieldEntry("{$typeName}: {$event['classic_annotation_intro']}", ""),
        ];

    }

    /**
     * Constructor.
     *
     * @param string $lang User language.
     *
     * @return void
     */
    public function __construct(string $lang) {

        $tlLoader = new MDTlLoader("available_fields", $lang);

        foreach (MD_STD::scandir(__DIR__ . "/../l10n/musdb/$lang/") as $fileName) {
            if (in_array($fileName, ['start.php', 'start2.php'])) continue;
            include __DIR__ . "/../l10n/musdb/{$lang}/{$fileName}";
        }

        include __DIR__ . "/../commonservices/$lang/search_all_fields.php";
        include __DIR__ . "/../commonservices/units.php";
        include __DIR__ . "/../classes/MDAllowedValueSets/l18n/$lang/eventtype_name.php";

        $currencies = MDCurrenciesSet::getSortedList($tlLoader);

        if (empty($fieldNoMultiplicator) or !is_numeric($fieldNoMultiplicator)) {
            $fieldNoMultiplicator = 1;
        }

        $availableFields = [

            $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'object_base_data') => [
                "inventory_number" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Only unique values allowed',
                    $tlLoader->tl("object_basis", "object_basis", 'inventory_number'),
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "object_type" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Keep it short! Field is needed to create valid LIDO from museum-digital entries',
                    $tlLoader->tl("object_basis", "object_basis", 'object_type'),
                    $tlLoader->tl("object_basis", "object_basis", 'oart_explica')
                ),
                "object_title" => new FieldEntry(
                    true,
                    [],
                    [],
                    'Best is not to repeat the title again and again for many objects, e.g. vase, vase, vase ... better: Green vase, Blue vase, Yellow vase, ...',
                    $tlLoader->tl("object_basis", "object_basis", 'object_name'),
                    $tlLoader->tl("object_basis", "object_basis", 'oname_explica')
                ),
                "object_description" => new FieldEntry(
                    true,
                    [],
                    [],
                    'A good description of the objects is fundamental to make the objects searchable in the internet',
                    $tlLoader->tl("object_basis", "object_basis", 'description'),
                    $tlLoader->tl("object_basis", "object_basis", 'obesch_explica')
                ),
                "object_material_technique" => new FieldEntry(
                    false,
                    [],
                    [],
                    'This is a cummulative field for material and technique. It is also possible to additionally save the information separate in the fields: <i>material_separate</i> and <i>technique_separate</i>',
                    $tlLoader->tl("object_basis", "object_basis", 'mattech'),
                    $tlLoader->tl("object_basis", "object_basis", 'mattech_explica')
                ),
                "object_dimensions" => new FieldEntry(
                    false,
                    [],
                    [],
                    'This is a cummulative field for dimensions (values and units). It is also possible to additionally save the information separate. See the block: <i>separate dimensions</i>',
                    $tlLoader->tl("object_basis", "object_basis", 'measurements'),
                    $tlLoader->tl("object_basis", "object_basis", 'ausmass_explica')
                ),
                "object_publication" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [],
                    'Shall the object be visible directly after import?',
                    $objekt['visibility'],
                    ''
                ),
                "institution_name" => new FieldEntry(
                    false,
                    [],
                    [],
                    'If name of institution is given it has to be exactly the same as already known in museum-digital',
                    $museum['museum_name'],
                    $museum['musnam_explica']
                ),
            ],
            $searchvar[0][0] => [
                "object_other_title" => new FieldEntry(
                    false,
                    [],
                    ['object_other_title_kind_of'],
                    'If the field <i>object_other_title</i> is used. It has to be specified where this alternative title is used. Specification should be done within the field: <i>object_other_title_kind_of</i>',
                    $searchvar[0][0],
                    ''
                ),
                "object_other_title_kind_of" => new FieldEntry(
                    false,
                    array_values(MDTitleTypesSet::TITLE_TYPES),
                    ['object_other_title'],
                    'This field has to be used togehter with <i>object_other_title</i>',
                    $searchvar[0][0] . ', in: ',
                    ''
                ),
            ],
            $searchvar[46][0] => [
                "detailed_description" => new FieldEntry(
                    false,
                    [],
                    ['detailed_description_md', 'detailed_description_extern'],
                    'If <i>detailed_desription</i> is made available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $searchvar[46][0],
                    $object_add['ddesc_inhalt']
                ),
                "detailed_description_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['detailed_description', 'detailed_description_extern'],
                    'Shall detailed description be visible at museum-digital? If <i>detailed_desription</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $object_add['ddesc_visibility_md'],
                    ""
                ),
                "detailed_description_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['detailed_description_md', 'detailed_description'],
                    'Shall later exports from museum-digital include the detailed_description?</br>If <i>detailed_desription</i> is available for an object, <i>detailed_description_md</i> and <i>detailed_description_extern</i> have to have values too',
                    $object_add['ddesc_visibility_extern']
                    ""
                ),
            ],
            $searchvar[2][0] => [
                "inscription" => new FieldEntry(
                    false,
                    [],
                    ['inscription_md', 'inscription_extern'],
                    'If <i>inscription</i> is made available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $searchvar[2][0],
                    $object_add['besch_inhalt']
                ),
                "inscription_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['inscription_md', 'inscription_extern'],
                    'Shall a given inscription be displayed at museum-digital? If <i>inscription</i> is available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $object_add['besch_visibility_md'],
                    ""
                ),
                "inscription_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['inscription_md', 'inscription_extern'],
                    'Shall later exports from museum-digital inlude inscription? If <i>inscription</i> is available for an object, <i>inscription_md></i> and <i>inscription_extern</i> have to have values too',
                    $object_add['besch_visibility_extern'],
                    ""
                ),
            ],
            "{$searchvar[52][0]} / {$searchvar[53][0]}" => [
                "material_separate" => new FieldEntry(
                    false,
                    [],
                    'Additional to collecting material and technique in a combined field (see above), the material(s) can be given here separately',
                    $searchvar[52][0],
                    ""
                ),
                "technique_separate" => new FieldEntry(
                    false,
                    [],
                    'Additional to collecting material and technique in a combined field (see above), the technique(s) can be given here separately',
                    $searchvar[53][0],
                    ""
                ),
            ],
            $object_add['separated_measurements'] => [
                "dimensions_separate_length_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_length_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_length_value'],
                    ""
                ),
                "dimensions_separate_length_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_length_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_length_unit'],
                    ""
                ),
                "dimensions_separate_width_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_width_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_width_value'],
                    ""
                ),
                "dimensions_separate_width_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_width_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_width_unit'],
                    ""
                ),
                "dimensions_separate_height_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_height_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_height_value'],
                    ""
                ),
                "dimensions_separate_height_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_height_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_height_unit'],
                    ""
                ),
                "dimensions_separate_weight_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_weight_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_weight_value'],
                    ""
                ),
                "dimensions_separate_weight_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_WEIGHT,
                    ['dimensions_separate_width_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_weight_unit'],
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "dimensions_separate_diameter_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_diameter_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_diameter_value'],
                    ""
                ),
                "dimensions_separate_diameter_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_diameter_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_diameter_unit'],
                    ""
                ),
                "dimensions_separate_wall_thickness_value" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_wall_thickness_unit', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_wall_size_value'],
                    ""
                ),
                "dimensions_separate_wall_thickness_unit" => new FieldEntry(
                    false,
                    MDUnitsSet::UNITS_LENGTH,
                    ['dimensions_separate_wall_thickness_value', 'dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    'If a separated value is given an entry for the respective unit is necessary. If a separated dimension entry is given, <i>dimensions_separate_show_md</i> and <i>dimensions_separate_show_extern</i> need to be filled in, too.',
                    $export['exact_measurements_wall_size_unit'],
                    ""
                ),
                "dimensions_separate_show_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [
                        "dimensions_separate_length_value", "dimensions_separate_length_unit", "dimensions_separate_width_value",
                        "dimensions_separate_width_unit", "dimensions_separate_height_value", "dimensions_separate_height_unit",
                        "dimensions_separate_weight_value", "dimensions_separate_weight_unit", "dimensions_separate_diameter_value",
                        "dimensions_separate_diameter_unit", "dimensions_separate_wall_thickness_value", "dimensions_separate_wall_thickness_unit"
                    ],
                    'If one or more separate dimension-value (and -unit) is given it has to be specified if the separated entries should be made visible at museum-digital',
                    $tlLoader->tl("object_basis", "object_basis", 'inventory_number'),
                    ""
                ),
                "dimensions_separate_show_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    [
                        "dimensions_separate_length_value", "dimensions_separate_length_unit", "dimensions_separate_width_value",
                        "dimensions_separate_width_unit", "dimensions_separate_height_value", "dimensions_separate_height_unit",
                        "dimensions_separate_weight_value", "dimensions_separate_weight_unit", "dimensions_separate_diameter_value",
                        "dimensions_separate_diameter_unit", "dimensions_separate_wall_thickness_value", "dimensions_separate_wall_thickness_unit"
                    ],
                    'If one or more separate dimension-value (and -unit) is given it has to be specified if the separated entries should be included in a later export from museum-digital',
                    $tlLoader->tl("object_basis", "object_basis", 'inventory_number'),
                    ""
                ),
                "number_of_pieces" => new FieldEntry(
                    false,
                    [],
                    'Only to be given if more than one copies of an object are available and catalogued with the same inventory number',
                    $export['exact_measurements_number_pieces'],
                    ""
                ),
                "number_of_pages" => new FieldEntry(
                    false,
                    [],
                    'Only to be given for books (etc.)',
                    $export['exact_measurements_number_pages'],
                    ""
                ),
                "dimensions_separate_stamp_position" => new FieldEntry(
                    false,
                    [],
                    ['dimensions_separate_show_md', 'dimensions_separate_show_extern'],
                    '',
                    $export['exact_measurements_stamp_position'],
                    ""
                ),
            ],
            $searchvar[11][0] => [
                "comparable_objects_other_museums" => new FieldEntry(
                    false,
                    [],
                    ['comparable_objects_other_museums_show_md', 'comparable_objects_other_museums_show_extern'],
                    'Name of other museum and if available the inventory number of the respective object. If <i>comparable_objects_other_museums</i> is given <i>comparable_objects_other_museums_show_md</i> and <i>comparable_objects_other_museums_show_extern</i> have to be given too',
                    $searchvar[11][0],
                    $object_add['vergl_inhalt']
                ),
                "comparable_objects_other_museums_show_md" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['comparable_objects_other_museums', 'comparable_objects_other_museums_show_extern'],
                    'Necessary if <i>comparable_objects_other_museums</i> is given. Should the information about comparable objects be displayed at museum-digital?',
                    $object_add['vergl_visibility_md'],
                    ""
                ),
                "comparable_objects_other_museums_show_extern" => new FieldEntry(
                    false,
                    ["y", "n"],
                    ['comparable_objects_other_museums', 'comparable_objects_other_museums_show_md'],
                    'Necessary if <i>comparable_objects_other_museums</i> is given. Should the information about comparable objects be part of later exports from museum-digital?',
                    $object_add['vergl_visibility_extern'],
                    ""
                ),
            ],
            $searchvar[1][0] => [
                "closer_location" => new FieldEntry(
                    false,
                    [],
                    ['closer_location_as'],
                    'A place in a special relation to the object. The kind of relation has to specified in <i>closer_location_as</i>',
                    $searchvar[1][0],
                    $object_add['loka_inhalt']
                ),
                "closer_location_as" => new FieldEntry(
                    false,
                    array_values($ortart),
                    ['closer_location'],
                    'A place in a special relation to the object can be given in <i>closer_location</i>. Here the kind of relation between object and place has to specified',
                    "{$searchvar[1][0]}, {$object_add['as']}",
                    ""
                ),
            ],
            $object_add['classification'] => [
                "entry_number" => new FieldEntry(
                    false,
                    [],
                    'The entry number of the object if available',
                    $searchvar[12][0],
                    $object_add['einu_inhalt']
                ),
                "other_inventory_number" => new FieldEntry(
                    false,
                    [],
                    'All other inventory numbers (older ones presumably) in one field',
                    $searchvar[13][0],
                    $object_add['invp_inhalt']
                ),
                "subject_group" => new FieldEntry(
                    false,
                    [],
                    'If the object is part of an subject group this information should be given here',
                    $searchvar[16][0],
                    ""
                ),
                "systematic" => new FieldEntry(
                    false,
                    [],
                    'If the object is put into a museum-systematic the place it has there',
                    $searchvar[17][0],
                    ""
                ),
                "bundle" => new FieldEntry(
                    false,
                    [],
                    'The bundle the object belongs to',
                    $searchvar[14][0],
                    ""
                ),
                "part_of" => new FieldEntry(
                    false,
                    [],
                    'If the object is part of something it can be given here',
                    $searchvar[15][0],
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'administration') => [
                "inclusion_when" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[19][0],
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "inclusion_kind_of" => new FieldEntry(
                    false,
                    MDEntryTypesSet::getSortedList($tlLoader),
                    '',
                    "{$searchvar[19][0]}, {$object_add['as']}",
                    ""
                ),
                "inclusion_who" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[47][0]}",
                    ""
                ),
                "inclusion_where" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[48][0],
                    ""
                ),
                "registration_first_who" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[49][0],
                    ""
                ),
                "registration_first_when" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[50][0],
                    ""
                ),
            ],
            $object_add['object_history'] => [
                "owner_previous" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[18][0],
                    $object_add['vorb_inhalt']
                ),
                "object_history" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[22][0],
                    $object_add['obge_inhalt']
                ),
                "bought_for" => new FieldEntry(
                    false,
                    '',
                    ["bought_for_currency"],
                    '',
                    "{$searchvar[19][0]}, {$object_add['for']}",
                    $tlLoader->tl("object_basis", "object_basis", 'inv_explica')
                ),
                "bought_for_currency" => new FieldEntry(
                    false,
                    $currencies,
                    ["bought_for"],
                    '',
                    "{$searchvar[19][0]}, {$object_add['for']}",
                    ""
                ),
            ],
            $object_add['values'] => [
                "worth_determiner" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[23][0]}; {$object_add['by']}",
                    ""
                ),
                "worth_when" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[23][0],
                    ""
                ),
                "worth_value" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[23][0]}; {$object_add['at']}",
                    ""
                ),
                "worth_unit" => new FieldEntry(
                    false,
                    $currencies,
                    '',
                    "{$searchvar[23][0]}; Currency",
                    ""
                ),
                "worth_insurance_determiner" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[26][0]}; {$object_add['by']}",
                    ""
                ),
                "worth_insurance_when" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[26][0]}",
                    ""
                ),
                "worth_insurance_value" => new FieldEntry(
                    false,
                    '',
                    '',
                    "{$searchvar[26][0]}; {$object_add['at']}",
                    ""
                ),
                "worth_insurance_unit" => new FieldEntry(
                    false,
                    $currencies,
                    '',
                    "{$searchvar[26][0]}; Currency",
                    ""
                ),
            ],
            $object_add['state'] => [
                "state" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[29][0],
                    $object_add['zust_inhalt']
                ),
                "restauration" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[30][0],
                    $object_add['rest_inhalt']
                ),
            ],
            $tlLoader->tl("basis", "basis", 'abode') => [
                "abode_actual" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[31][0],
                    $object_add['aktu_inhalt']
                ),
                "abode_regular" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[32][0],
                    $object_add['stan_inhalt']
                ),
                "exhibition" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[33][0],
                    $object_add['aust_inhalt']
                ),
                "on_loan_to" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[34][0],
                    $object_add['verl_inhalt']
                ),
                "on_loan_contact" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[35][0],
                    $object_add['ansp_inhalt']
                ),
                "on_loan_when" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[36][0],
                    $object_add['vher_inhalt']
                ),
                "on_loan_insurance_value" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[37][0],
                    $object_add['vlei_inhalt']
                ),
                "on_loan_annotation" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[38][0],
                    $object_add['alei_inhalt']
                ),
            ],
            $tlLoader->tl("basis", "basis", 'rights') => [
                "rights_object" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[39][0],
                    $object_add['urhe_inhalt']
                ),
                "rights_of_use" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[40][0],
                    $object_add['nure_inhalt']
                ),
                "rights_annotation" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[41][0],
                    $object_add['arec_inhalt']
                ),
                "rights_metadata_holder" => new FieldEntry(
                    false,
                    '',
                    '',
                    $object_add['metadata_rights_holder'],
                    ""
                ),
                "rights_metadata_license" => new FieldEntry(
                    false,
                    '',
                    '',
                    $object_add['metadata_rights_status'],
                    ""
                ),
            ],
            $tlLoader->tl("basis", "basis", 'remarks') => [
                "remarks_short" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[42][0],
                    $object_add['kurz_inhalt']
                ],
                "remarks_long" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[43][0],
                    $object_add['noti_inhalt']
                ),
                "images_in_museum" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[44][0],
                    $object_add['oaim_inhalt']
                ),
                "documents_in_museum" => new FieldEntry(
                    false,
                    '',
                    '',
                    $searchvar[45][0],
                    $object_add['odim_inhalt']
                ),
            ],
            $overview['links'] => [],
            $overview['links'] . ": " . $tlLoader->tl("basis", "basis", 'single_object') => [],
            "translations" => [],
            $tlLoader->tl("basis", "basis", 'literature') => [],
            $tlLoader->tl("basis", "basis", 'objectgroup') => [],
            $overview['tags'] => [],
            $eventname[22] => [],
            $eventname[23] => [],
            $eventname[24] => [],
            $overview['images'] => [],
            $tlLoader->tl("basis", "basis", 'resource') => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[1] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[2] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[3] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[4] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[5] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[36] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[6] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[7] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[8] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[9] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[10] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[11] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[12] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[13] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[14] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[15] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[16] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[19] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[20] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[21] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[25] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[26] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[27] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[28] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[29] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[30] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[31] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[32] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[33] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[34] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[35] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[37] => [],
            $tlLoader->tl("basis", "basis", 'event') . ": " . $eventname[38] => [],
        ];

        /*
         * Repeat fields
         */

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['links']] = array_merge($availableFields[$overview['links']],
            [
                "link_url{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["link_show{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $link['url'],
                    "explica"             => $link['linklink_explica'],
                ],
                "link_show{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["link_url{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $link['text'],
                    "explica"             => $link['linkname_explica'],
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['links'] . ": " . $tlLoader->tl("basis", "basis", 'single_object')] = array_merge($availableFields[$overview['links'] . ": " . $tlLoader->tl("basis", "basis", 'single_object')],
            [
                "linked_obj_invno{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["linked_obj_show{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "Inventarnummer des verknüpften Objektes",
                    "explica"             => "",
                ],
                "linked_obj_show{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["linked_obj_invno{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "Verknüpftes Objekt: Text",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields["translations"] = array_merge($availableFields["translations"],
            [
                "obj_trans_language{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "Translation language",
                    "explica"             => "",
                ],
                "obj_trans_object_type{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("object_basis", "object_basis", 'object_type'),
                    "explica"             => $tlLoader->tl("object_basis", "object_basis", 'oart_explica'),
                ],
                "obj_trans_object_title{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("object_basis", "object_basis", 'object_name'),
                    "explica"             => $tlLoader->tl("object_basis", "object_basis", 'oname_explica'),
                ],
                "obj_trans_object_description{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("object_basis", "object_basis", 'description'),
                    "explica"             => $tlLoader->tl("object_basis", "object_basis", 'obesch_explica'),
                ],
                "obj_trans_object_material_technique{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("object_basis", "object_basis", 'mattech'),
                    "explica"             => $tlLoader->tl("object_basis", "object_basis", 'mattech_explica'),
                ],
                "obj_trans_object_dimensions{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["obj_trans_language{$i}", "obj_trans_object_type{$i}", "obj_trans_object_title{$i}", "obj_trans_object_description{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("object_basis", "object_basis", 'measurements'),
                    "explica"             => $tlLoader->tl("object_basis", "object_basis", 'ausmass_explica'),
                ],
            ]);

        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'literature')] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'literature')],
            [
                "literature_author{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'author'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'autor_explica'),
                ],
                "literature_year{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'year'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'jahr_explica'),
                ],
                "literature_title{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'title'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'titel_explica'),
                ],
                "literature_place{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'place'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'ort_explica'),
                ],
                "literature_abbreviation{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'abbr'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'abbr_explica'),
                ],
                "literature_gnd{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'gnd'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'gnd_explica'),
                ],
                "literature_isbn{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'isbn'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'isbn_explica'),
                ],
                "literature_signature{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'id_in_museum'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'id_in_museum_explica'),
                ],
                "literature_online{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'online'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'online_explica'),
                ],
                "literature_annotation{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'annotation'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'annotation_explica'),
                ],
                "literature_inlit{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["literature_title{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("literature", "literature", 'where_inside'),
                    "explica"             => $tlLoader->tl("literature", "literature", 'where_in_explica'),
                ],
            ]);

        }

        // Collection names

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl('csvxml-overview', 'csvxml_overview', 'object_base_data')]["collection_name{$i}"] = [
                "required"            => false,
                "allowedValues"       => [],
                "dependsOn"           => [],
                "remark"              => 'Use if object belongs to a collection. If collection is already in museum-digital, please use exactly the same name',
                "name_human_readable" => $collection['name'],
                "explica"             => $collection['samnam_explica'],
            ];

        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'objectgroup')] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'objectgroup')],
            [
                "object_group_name{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [],
                    "remark"              => '',
                    "name_human_readable" => $link['series_name'],
                    "explica"             => $link['seriename_explica'],
                ],
                "object_group_description{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["object_group_name{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $link['series_description'],
                    "explica"             => $link['series_description'],
                ],
                "object_group_show{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["object_group_name{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $link['hide_objectgroup'],
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['tags']]["tag{$i}"] = [
                "required"            => false,
                "allowedValues"       => [],
                "remark"              => '',
                "name_human_readable" => $overview['tags'],
                "explica"             => "",
            ];

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$eventname[22]] = array_merge($availableFields[$eventname[22]],
            [
                "related_place{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["related_place_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['where'],
                    "explica"             => "",
                ],
                "related_place_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["related_place{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "{$event['where']} [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$eventname[23]] = array_merge($availableFields[$eventname[23]],
            [
                "related_actor{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["related_actor_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['who'],
                    "explica"             => "",
                ],
                "related_actor_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["related_actor{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "{$event['who']} [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
                "related_actor_gnd{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["related_actor{$i}", "related_actor_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => "{$event['who']} ({$event['gnd']})",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$eventname[24]] = array_merge($availableFields[$eventname[24]],
            [
                "related_time{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["related_time_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['when'],
                    "explica"             => "",
                ],
                "related_time_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["related_time{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['when'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $i++) {

            $availableFields[$overview['images']] = array_merge($availableFields[$overview['images']],
            [
                "image_name{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'image_filename'),
                    "explica"             => "",
                ],
                "image_description{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $image_incha['image_description'],
                    "explica"             => $image_incha['bildbesch_explica'],
                ],
                "image_owner{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "image_name{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $image_incha['image_rightsholder'],
                    "explica"             => $image_incha['owner_explica'],
                ],
                "image_creator{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $image_incha['photographer'],
                    "explica"             => $image_incha['creator_explica'],
                ],
                "image_rights{$i}" => [
                    "required"            => false,
                    "allowedValues"       => array_keys(MDLicensesSet::AVAILABLE_LICENSES),
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $image_incha['rights_status'],
                    "explica"             => $image_incha['rechte_explica'],
                ],
                "image_visible{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $tlLoader->tl("basis", "basis", 'image') . ": {$objekt['visibility']}",
                    "explica"             => "",
                ],
                "image_main{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $object['main_image'],
                    "explica"             => "",
                ],
                "image_master_filename{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "image_name{$i}", "image_owner{$i}", "image_rights{$i}", "image_visible{$i}", "image_main{$i}"
                    ],
                    "remark"              => '',
                    "name_human_readable" => $image_incha['master_filename'],
                    "explica"             => $image_incha['master_filename_explica'],
                ],
            ]);

        }

        for ($i = 1; $i <= 10 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'resource')] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'resource')],
            [
                "resource_media_type{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ['image', 'text', 'video', 'audio'],
                    "dependsOn"           => [
                        "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'Allowed values: image, text, video, audio',
                    "name_human_readable" => $tlLoader->tl("basis", "basis", 'resource') . ', ' . $tlSources['type'],
                    "explica"             => "",
                ],
                "resource_fileformat{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'e.g. pdf, mp3',
                    "name_human_readable" => $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'file_format'),
                    "explica"             => "",
                ],
                "resource_location{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'In case the resource is stored externally: please include the whole path (incl. http or https) to the file. If the resource is uploaded to museum-digital: please put the filename here (e.g. file.pdf)',
                    "name_human_readable" => $resource_incha['image_filename'],
                    "explica"             => "",
                ],
                "resource_name{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'Use, if you want to give the resource an own name. If not, you might want to repeat the object_title',
                    "name_human_readable" => $resource_incha['resource_name'],
                    "explica"             => $resource_incha['bildname_explica'],
                ],
                "resource_description{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ['Use if you want to describe the resource. Might be left empty.'],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => '',
                    "name_human_readable" => $resource_incha['resource_description'],
                    "explica"             => $resource_incha['bildbesch_explica'],
                ],
                "resource_owner{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'The owner should be named. Usually it is the institution uploading the resource.',
                    "name_human_readable" => $resource_incha['resource_rightsholder'],
                    "explica"             => $resource_incha['owner_explica'],
                ],
                "resource_creator{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => 'Name of the person that created the resource. Might be left empty.',
                    "name_human_readable" => $resource_incha['creator'],
                    "explica"             => $resource_incha['creator_explica'],
                ],
                "resource_rights{$i}" => [
                    "required"            => false,
                    "allowedValues"       => array_keys(MDLicensesSet::AVAILABLE_LICENSES),
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_visible{$i}",
                    ],
                    "remark"              => '',
                    "name_human_readable" => $resource_incha['rights_status'],
                    "explica"             => $resource_incha['rechte_explica'],
                ],
                "resource_visible{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => [
                        "resource_media_type{$i}", "resource_fileformat{$i}", "resource_location{$i}", "resource_name{$i}", "resource_owner{$i}", "resource_rights{$i}",
                    ],
                    "remark"              => 'Should the resource be publicly visible? Allowed values are either y and n',
                    "name_human_readable" => $tlLoader->tl("basis", "basis", 'resource') . ": {$objekt['visibility']}",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[1]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[1]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[1], "production", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[2]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[2]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[2], "finding", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[3]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[3]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[3], "publication", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[4]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[4]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[4], "template_creation", $i)
                );
        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[5]] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[5]],
            [
                "was_depicted_who{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["was_depicted_who_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['who'],
                    "explica"             => "",
                ],
                "was_depicted_who_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["was_depicted_who{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['who'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 5 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[36]] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[36]],
            [
                "was_depicted_place{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["was_depicted_place_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['where'],
                    "explica"             => "",
                ],
                "was_depicted_place_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["was_depicted_place{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['where'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
            ]);

        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[6]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[6]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[6], "was_used", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[7]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[7]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[7], "written", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[8]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[8]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[8], "collected", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[9]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[9]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[9], "painted", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[10]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[10]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[10], "taken", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[11]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[11]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[11], "received", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[12]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[12]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[12], "printing_plate_produced", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[13]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[13]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[13], "sent", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[14]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[14]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[14], "issued", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[15]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[15]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[15], "signed", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[16]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[16]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[16], "type_described", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[19]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[19]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[19], "drawn", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[20]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[20]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[20], "copied", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[25]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[25]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[25], "commissioned", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[26]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[26]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[26], "printed", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[27]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[27]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[27], "spoken", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[28]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[28]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[28], "sung", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[29]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[29]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[29], "decor_designed", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[30]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[30]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[30], "form_designed", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[31]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[31]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[31], "modelled", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[32]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[32]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[32], "signed_artwork", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[33]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[33]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[33], "was_mentioned", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[34]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[34]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[34], "buried", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[35]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[35]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[35], "intellectual_creation", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[37]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[37]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[37], "painted_on", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {
            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[38]] = array_merge(
                $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[38]],
                $this->_generateGenericFullEvent($event, $tlLoader, $eventname[38], "illustrated", $i)
                );
        }

        for ($i = 1; $i <= 2 * $fieldNoMultiplicator; $i++) {

            $availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[21]] = array_merge($availableFields[$tlLoader->tl("basis", "basis", 'event') . ': ' . $eventname[21]],
            [
                "has_lived_when{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["has_lived_when_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['when'],
                    "explica"             => "",
                ],
                "has_lived_when_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["has_lived_when{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['when'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
                "has_lived_where{$i}" => [
                    "required"            => false,
                    "allowedValues"       => [],
                    "dependsOn"           => ["has_lived_where_sure{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['where'],
                    "explica"             => "",
                ],
                "has_lived_where_sure{$i}" => [
                    "required"            => false,
                    "allowedValues"       => ["y", "n"],
                    "dependsOn"           => ["has_lived_where{$i}"],
                    "remark"              => '',
                    "name_human_readable" => $event['where'] . " [" . $tlLoader->tl('csvxml-overview', 'csvxml_overview', 'certainty') . "]",
                    "explica"             => "",
                ],
                "has_lived_annotation{$i}" => [
                    "required"            => false,
                    "allowedValues"       => '',
                    "dependsOn"           => [],
                    "remark"              => '',
                    "name_human_readable" => $event['classic_annotation_intro'],
                    "explica"             => "",
                ],
            ]);

        }

        $this->_availableFields = $availableFields;

    }
}