#!c:\Program Files\Python39\python.exe
# -*- coding: UTF-8 -*-

'''
$RCSfile: grouping.py,v $
$Revision$
$Author: markus $
$Date$
The BioCASE querytool
'''

import os
# ***** include the biocase.lib directory in the python sys path for importing *****
exec(open(os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir, 'lib', 'biocase', 'adjustpath.py'))).read())
# exec(compile(open( os.path.abspath( os.path.join( os.path.dirname( __file__ ), os.pardir, os.pardir, 'lib', 'biocase', 'appinit.py' ) ), "rb").read(), os.path.abspath( os.path.join( os.path.dirname( __file__ ), os.pardir, os.pardir, 'lib', 'biocase', 'appinit.py' ) ), 'exec'))

# import pydevd; pydevd.settrace();
from biocase.tools.templating import PageMacro
from biocase.tools.htmltools import getDropDownOptionHtml, escapeHtml
from biocase.querytool.general import dsa, skinDir, wrapper_url, schemaObj, schema, printOverHTTP, createFilter, form, logDiagnostics
from biocase.querytool.querydispatcher import QueryDispatcher, WrapperError
from biocase.querytool.querygenerator import QueryGenerator

import logging
log = logging.getLogger("querytool.grouping")

tmpl = PageMacro('Content', PageMacro.DELMODE)
tmpl.load('Content', os.path.join(skinDir, 'grouping.html'))

# build a new filter object from form values
filterObj = createFilter(form, schemaObj)
log.info("FILTER OBJ: %s" % filterObj)

# generate the protocol
QG = QueryGenerator()
groupConcept = form['groupby'].value
protocolXML = QG.getScanProtocol(concept=schemaObj.getConcept(groupConcept).path, NS=schemaObj.NS, filterObj=filterObj)
log.info("QUERY PROTOCOL CREATED:\n%s" % escapeHtml(protocolXML))

# update template
tmpl['dsa'] = dsa
tmpl['schema'] = schema
tmpl['limit'] = str(schemaObj.limit)
if filterObj is not None:
    tmpl['filter'] = str(filterObj)
tmpl['filter_display'] = escapeHtml(str(filterObj).replace('_', ' '))
tmpl['groupingCon'] = groupConcept
tmpl['groupby_options'] = getDropDownOptionHtml(vals=['---None---'] + [c.label for c in schemaObj.concepts], default='---None---')
if wrapper_url is not None:
    tmpl['wrapper_url'] = wrapper_url

# query the wrapper
QD = QueryDispatcher()
try:
    recStatus = QD.sendQuery(wrapper_url, protocolXML)
    # wrapper results:
    valuelist = QD.getScanValues()
    logDiagnostics(QD.getDiagnostics())
    # wrapper results:
    tmpl['hits'] = str(recStatus.count)
    valueTemplateList = [{'val': v} for v in valuelist]
    tmpl.expand('Content', 'grouplist', valueTemplateList)
except WrapperError as e:
    tmpl = PageMacro('Content', PageMacro.DELMODE)
    tmpl.load('Content', os.path.join(os.path.dirname(__file__), '_error.html'))
    tmpl['dsa'] = dsa
    tmpl['ErrorMessage'] = e.msg

# print HTML !
printOverHTTP(tmpl)