
// Recupero i parametri dall'URL -- mi aspetto un parametro di nome 'link'!
thisUrlParams = {};
window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
    thisUrlParams[key] = value;
});
console.log('URL get params: ', thisUrlParams);


// Funzioni per eseguire le queries

function prepareQueryURL(query){
    sparqlEndpoint = 'http://dev.restore.ovi.cnr.it:8890/sparql/';
    sparqlUrlParams = '?default-graph-uri=&query=' + encodeURIComponent(query) + '&output=json&callback=?';
    return sparqlEndpoint + sparqlUrlParams;
}

// Esegue una query sull'endpoint SPARQL il cui testo completo deve essere fornito nel parametro-stringa 'query'
// Restituisce una lista di oggetti json nel formato di Virtuoso
// Il parametro opzionale 'isUnique', se messo a 'true' controlla che ci sia un unico risultato (un array di
// lunghezza 1) e se non è così restituisce un errore.
async function doJsonQuery(query, isUnique = false){

    queryURL = prepareQueryURL(query);

    response = await $.ajax({//OGGETTO

        url: queryURL,
        dataType: "json",
        success: function (data){},
        error: function (e) {
            console.log("Exception in query:", e);
        }
    });

    let out = response['results']['bindings'];
    if(!isUnique) return out;
    if(!out.length) throw "ERROR: Letter not found";
    if(out.length>1) throw "ERROR: ambiguity in search -- multiple letters matching search parameters";
    return out[0];

}

// Nuova funzione per l'NLP
function loadPageNLP()
{
     window.location="nlp.html?link=" + thisUrlParams.link;
}

// Nuova funzione per Button EVT
function loadPageEVT()
{
     window.location="http://restore.ovi.cnr.it/mockup/evt/index.html";
}

// Nuova funzione per Button LOD
function loadPageLOD()
{
     window.location="http://dev.restore.ovi.cnr.it/lodlive/?" + thisUrlParams.link;
}


////////////////////
// TESTI DELLE QUERY
////////////////////

prefixes = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> \
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> \
PREFIX crm: <http://www.cidoc-crm.org/cidoc-crm/> \
PREFIX dat: <http://datini.archiviodistato.prato.it/la-ricerca/scheda/> \
PREFIX mpp: <http://palazzopretorio.comune.prato.it/it/le-opere/alcuni-capolavori/> \
PREFIX aut: <http://palazzopretorio.comune.prato.it/it/opere/autori/>"

query1 = prefixes + " SELECT DISTINCT ?subject ?mittente ?destinatario ?data_partenza ?data_arrivo ?uriLuogoPartenza ?luogo_partenza ?uriLuogoArrivo ?luogo_arrivo \
WHERE {?subject crm:P128_carries <" + thisUrlParams.link + "> \
GRAPH <http://dev.restore.ovi.cnr.it:8890/ovi/datini> {?subject crm:P25i_moved_by ?mov_ev .} \
?send rdfs:subClassOf ?mov_ev ; \
rdf:type crm:EL2_Send_Letter . \
OPTIONAL {?send crm:P4_has_time-span ?time_spanA . \
?time_spanA rdfs:label ?data_partenza . } \
OPTIONAL {?send crm:P27_moved_from ?uriLuogoPartenza . \
?uriLuogoPartenza rdfs:label ?luogo_partenza . } \
OPTIONAL {?send crm:P01_has_domain ?uriMittente . \
?uriMittente crm:P02_has_range ?mittente . } \
 \
?receive rdfs:subClassOf ?mov_ev; \
rdf:type crm:EL3_Receive_Letter . \
OPTIONAL {?receive crm:P4_has_time-span ?time_spanB . \
?time_spanB rdfs:label ?data_arrivo . } \
OPTIONAL {?receive crm:P26_moved_to ?uriLuogoArrivo . \
?uriLuogoArrivo rdfs:label ?luogo_arrivo . } \
OPTIONAL {?receive crm:P01_has_domain ?receiver . \
?receiver crm:P02_has_range ?destinatario . } \
} LIMIT 1"

query2 = prefixes + " SELECT DISTINCT ?uriSender ?mittente ?uriReceiver ?destinatario ?timeSpanSend ?timeSpanReceive ?placeSend ?placeReceive ?identifier ?material ?dimension ?currentLocation \
WHERE {?subject crm:P128_carries <" + thisUrlParams.link + "> . \
GRAPH <http://dev.restore.ovi.cnr.it:8890/aspo/datini/item> {?subject crm:P25i_moved_by ?mov_ev .} \
?send rdfs:subClassOf ?mov_ev ; \
rdf:type crm:EL2_Send_Letter . \
?receive rdfs:subClassOf ?mov_ev ; \
rdf:type crm:EL3_Receive_Letter . \
\
OPTIONAL {?subject crm:P54_has_current_permanent_location ?uriCurrentLocation . \
?uriCurrentLocation rdfs:label ?currentLocation . } \
OPTIONAL {?subject crm:P45_consist_of ?uriMaterial . \
?uriMaterial rdfs:label ?material . } \
OPTIONAL {?subject crm:P43_has_dimension ?uriDimension . \
?uriDimension rdfs:label ?dimension . } \
OPTIONAL {?subject crm:P1_is_identified_by ?uriIdentifier . \
?uriIdentifier rdfs:label ?identifier . \
?identifier bif:contains 'Segnatura'} \
\
OPTIONAL {?send crm:P4_has_time-span ?time_spanS . \
?time_spanS rdfs:label ?timeSpanSend } \
OPTIONAL {?receive crm:P4_has_time-span ?time_spanR . \
?time_spanR rdfs:label ?timeSpanReceive } \
\
OPTIONAL {?send crm:P27_moved_from ?placeS . \
?placeS rdfs:label ?placeSend } \
OPTIONAL {?receive crm:P26_moved_to ?placeR . \
?placeR rdfs:label ?placeReceive } \
\
OPTIONAL {?send crm:P01_has_domain ?pcS . \
?pcS crm:P02_has_range ?uriSender . \
?uriSender rdfs:label ?mittente } \
\
OPTIONAL {?receive crm:P01_has_domain ?pcR . \
?pcR crm:P02_has_range ?uriReceiver . \
?uriReceiver rdfs:label ?destinatario } \
} LIMIT 1"

querySegnatura = prefixes + "SELECT DISTINCT ?segnatura_OVI \
WHERE {?subject crm:P128_carries <" + thisUrlParams.link + ">; \
crm:P1_is_identified_by ?segnatura_ASPO . \
?segnatura_ASPO crm:P139_has_alternative_form ?segnatura . \
?segnatura crm:P2_has_type ?tipo_segnatura ; \
rdfs:label ?segnatura_OVI . \
?tipo_segnatura rdfs:label \"Segnatura OVI\"} LIMIT 1"

queryAreaLinguistica = prefixes + " SELECT DISTINCT ?lingua ?area_linguistica \
WHERE {<" + thisUrlParams.link + "> crm:P72_has_language ?language . \
?language crm:P3_has_note ?area ; \
rdfs:label ?lingua . \
?area rdfs:label ?area_linguistica \
} LIMIT 1"


queryDescrizione = prefixes + " SELECT DISTINCT ?descrizione \
WHERE {<" + thisUrlParams.link + "> crm:P3_has_note ?description . \
?description rdfs:label ?descrizione \
} LIMIT 1"

queryTipo = prefixes + " SELECT DISTINCT ?tipologia \
WHERE {<" + thisUrlParams.link + "> crm:P2_has_type ?type . \
?type rdf:type crm:E55_Type; \
rdfs:label ?tipologia . \
} LIMIT 1"

querySiglaOVI = prefixes + " SELECT DISTINCT ?sigla_OVI \
WHERE {<" + thisUrlParams.link + "> crm:P1_is_identified_by ?id . \
?id rdf:type crm:E42_Identifier; \
crm:P2_has_type ?type ; \
rdfs:label ?sigla_OVI . \
?type rdfs:label 'Sigla OVI'. \
} LIMIT 1"

queryTitolo = prefixes + " SELECT DISTINCT ?titolo \
WHERE {<" + thisUrlParams.link + "> crm:P1_is_identified_by ?title . \
?title rdf:type crm:E35_Title; \
rdfs:label ?titolo . \
} LIMIT 1"

queryTestoLemmatizzato = prefixes + " SELECT DISTINCT ?testo_lemmatizzato \
WHERE {<" + thisUrlParams.link + "> crm:P190_has_symbolic_content ?testo_lemmatizzato . \
} LIMIT 1"

queryEdizione = prefixes + " SELECT DISTINCT ?edizione ?edizione_abbreviata \
WHERE {?edition crm:P70_documents <" + thisUrlParams.link + "> ; \
crm:P1_is_identified_by ?edition_id . \
?edition_id rdfs:label ?edizione; \
crm:P139_has_alternative_form ?ed_abbr . \
?ed_abbr rdfs:label ?edizione_abbreviata \
} LIMIT 1"

queryRaccolta = prefixes + " SELECT DISTINCT ?raccolta \
WHERE {?racc crm:P148_has_component <" + thisUrlParams.link + "> ; \
crm:P2_has_type ?racc_type ; \
rdfs:label ?raccolta . \
?racc_type rdfs:label 'Raccolta'. \
} LIMIT 1"

queryToponimi = prefixes + "SELECT DISTINCT ?link_toponimo ?toponimo \
WHERE {<" + thisUrlParams.link + "> crm:P67_refers_to ?link_toponimo . \
?link_toponimo rdfs:label ?toponimo ; \
crm:P2_has_type 'Toponimo' . \
}"

queryAntroponimi = prefixes + "SELECT DISTINCT * \
WHERE {<" + thisUrlParams.link + "> crm:P67_refers_to ?link_antroponimo . \
?link_antroponimo rdfs:label ?antroponimo; \
crm:P2_has_type 'Antroponimo'}"