<?PHP
/**
 * Contains a class listing central object repositories which may share contents
 * with museum-digital.
 *
 * @author Joshua Ramon Enslin <joshua@museum-digital.de>
 */
declare(strict_types = 1);

/**
 * Class listing syndication sources.
 */
final class MDObjectSyndicationSet extends MDValueSet {

    const REPOSITORIES = [

        'ddb' => [
            'url'           => 'https://www.deutsche-digitale-bibliothek.de/',
            'object_prefix' => 'https://www.deutsche-digitale-bibliothek.de/item/',
            'org_prefix'    => 'https://www.deutsche-digitale-bibliothek.de/organization/',
            'id_is_int'     => false,
        ],
        'europeana' => [
            'url'           => 'https://www.europeana.eu/',
            'object_prefix' => 'https://www.europeana.eu/en/item/',
            'org_prefix'    => null,
            'id_is_int'     => false,
        ],
        'smb-digital' => [
            'url'           => 'https://recherche.smb.museum/',
            'object_prefix' => 'https://id.smb.museum/object/',
            'org_prefix'    => null,
            'id_is_int'     => true,
        ],
        'kalliope-verbund' => [
            'url'           => 'https://kalliope-verbund.info/',
            'object_prefix' => 'https://kalliope-verbund.info/',
            'org_prefix'    => 'https://kalliope-verbund.info/isil?isil.id=',
            'id_is_int'     => false,
        ],

    ];

    /**
     * Returns a correctly formed search URL for a given object in a given
     * repository, optionally naming the institution.
     *
     * @param string $repo         Repository to search in.
     * @param string $instId       Remote ID of the institution to search for.
     * @param string $search_value Search string.
     *
     * @return string
     */
    public static function getSearchUrlForObject(string $repo, string $instId, string $search_value):string {

        switch ($repo) {
        case 'ddb':
            return "https://www.deutsche-digitale-bibliothek.de/searchresults?query=" . \urlencode($search_value) . "&facetValues[]=" . \urlencode("provider_id=" . $instId);
        default:
            throw new MDpageParameterNotFromListException("Search URLs can only be generated for the following repositories: ddb");
        }

    }

    /**
     * Function for checking the availability of a provided repository in the
     * list of known repositories.
     *
     * @param string $repo Repository name to check.
     *
     * @return string|boolean
     */
    final public static function checkRepositoryIsKnown(string $repo) {
        if (isset(self::REPOSITORIES[$repo])) {
            return $repo;
        }
        return false;

    }

    /**
     * Gets a sorted list of the entries in a translated version.
     *
     * @param MDTlLoader $tlLoader Translation loader.
     *
     * @return array<string>
     */
    public static function getSortedList(MDTlLoader $tlLoader):array {

        return parent::getTlSortedList($tlLoader, array_keys(self::REPOSITORIES), "syndication_repos", "syndication_repos");

    }
}