from .cooccorrenze import cooccorrenze
from .contexts import contexts

def handleGetOccurrences(queryList, cooccorrenzeObj, dataConfig):

    queryHandler = cooccorrenze(dataConfig)

    res = []
    if len(queryList)==1:
        query = queryList[0]
        text = query['stringa']
        espansa = int(query['espansa'])
        raddoppiata = int(query['raddoppiata'])

        if text.strip()!="":
            res += queryHandler.sendBasicQuery(text, query['tipo'], espansa, raddoppiata)

    elif len(queryList)>1:
        
        intervallo = int(cooccorrenzeObj['distanza'])
        periodo = int(cooccorrenzeObj['stesso_periodo'])
        ordinate = int(cooccorrenzeObj['ordinate'])

        listaricerche = [[query['stringa'], occQueryTypesDict[query['tipo']], int(query['espansa']), int(query['raddoppiata'])] for query in queryList if query['stringa'].strip()!=""]

        res = queryHandler.ricerca_cooccorrenze(listaricerche, intervallo, periodo, ordinate)

    return res

#Funzione per il recupero dei contesti multipli
def handleGetContexts(queryList, listResults, dataConfig):

    queryHandler = contexts(dataConfig)

    query = queryList[0]
    tipo = occQueryTypesDict[query['tipo']]

    res = queryHandler.contestimultipli(tipo, listResults)

    return res

#Funzione da sistemare per il recupero dei contesti singoli
def handleGetSingleContext(elem, paramObj, dataConfig):

    queryHandler = contexts(dataConfig)

    indice = 0
    parole = int(paramObj['parole'])
    periodi = int(paramObj['periodi'])
    brani = int(paramObj['brani'])

    res = queryHandler.contestosingolo(elem, indice, parole, periodi, brani)

    return res

# Dict: occurrence query type <=> code 
occQueryTypesDict = {
    'forma': 0,
    'formaLemma': 0,
    'lemmaForma': 2,
    'soloLemmatizzate': 1,
    'lemma': 2
}