# coding: utf-8
'''
Created on 28.12.2015

@author: i.lopatin

'''
import json

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from qt._qt_orm import QtiQuestionCursor, QtiDestructorCursor

try:
    from ru.curs.showcase.core.jython import JythonDTO
    from ru.curs.showcase.core.selector import ResultSelectorData
    from ru.beta2.extra.gwt.ui.selector.api import DataRecord
except:
    from ru.curs.celesta.showcase import JythonDTO, DataRecord, ResultSelectorData

def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
   
    u'''Процедура для отрисовки данных карточки. '''
    
    question = QtiQuestionCursor(context)
    u"""Получение набора всего набора полей из данной таблицы"""
    currQuestionId = json.loads(session)['sessioncontext']["related"]["gridContext"]["currentRecordId"]
    
    if question.tryGet(currQuestionId):
        xformsdata = {"schema": {
                        "questionData": {
                            "@add":add,
                            "@QuestionHtml" :question.QuestionHtml,
                            "@QuestionImg": question.QuestionImg,
                            "@QuestionType": question.QuestionType,
                            "@ThemeID": question.ThemeID,
                            "@QuestionHtml2": question.QuestionHtml2}}}
        
        xformssettings = {"properties": {
                            "event": [
                                {"@name":"single_click",
                                 "@linkId": "1",
                                 "action": {
                                    "#sorted": [
                                        {"main_context": "current"},
                                        {"datapanel": {
                                            "@type": "current",
                                            "@tab": "current",
                                            "element": [{
                                                "@id":"webQuestionGrid",
                                                "add_context": ""},
                                                {
                                                "@id":"btzAnswerGrid",
                                                "add_context": "hide"}
                                                ]
                                            }}]}},
                                {"@name":"single_click",
                                 "@linkId": "2",
                                 "action": {
                                    "#sorted": [
                                        {"main_context": "current"},
                                        {"datapanel": {
                                            "@type": "current",
                                            "@tab": "current",
                                            "element": {
                                                "@id":"webQuestionGrid",
                                                "@keep_user_settings": "true",
                                                "add_context": ""}}}]}}]}}
    
        return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)),
            XMLJSONConverter.jsonToXml(json.dumps(xformssettings)))
    else:
        context.error(u'Вопрос не найден')


def cardDataDelete(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):    
    u'''Процедура удаления''' 
    u"""Получение набора всего набора полей из данной таблицы"""
    idContent = json.loads(session)['sessioncontext']['related']['gridContext']    
    if not isinstance(idContent, list):
        idContent = [idContent]
        
    currRecordId = None
    selectedRecordId = None
    u""" Выбор нужного системного id"""
    for grid in idContent:
        if grid["@id"] == "webQuestionGrid":
            currRecordId = grid.get("currentRecordId")
            selectedRecordId = grid.get("selectedRecordId")
    u""" Обновление, удаление, и редактирование для соответсвующей карточки"""
    if selectedRecordId:
        if not isinstance(selectedRecordId, list):
            selectedRecordId = [selectedRecordId]
        question = QtiQuestionCursor(context)
        answers = QtiDestructorCursor(context)
        for rec in selectedRecordId:
            if question.tryGet(rec):
                answers.clear()
                answers.setRange('QuestionID', question.QuestionID)
                answers.deleteAll()
                question.delete()
        context.message(u"Данные удалены")
#     if currRecordId:
#         question = QtiQuestionCursor(context)
#         if question.tryGet(currRecordId):
#             question.delete()
#             context.message(u"Данные удалены")
    

def checkIllegalSigns(content, context):
    result = False    
    u"""Список запрещенных символов"""
    illegalSigns = ["{", "}"]    
    u"""Словарь соотвествия названия поля ввода и столбца в таблице"""
    inputFieldsDict = {"@QuestionHtml": "Html вопроса",
                       "@QuestionImg": "Изображение вопроса",
                       "@QuestionType": "Тип вопроса",
                       "@ThemeID": "ID темы",
                       "@QuestionHtml2": "Html2 вопроса"}
    u"""Поиск запрещенных символов в введенных строках"""    
    for sign in illegalSigns:
        for key, value in content.items():
            if sign in value:
                context.error(u"Ошибка в поле \"%s\", символ %s запрещен. Список запрещенных символов: %s" % (inputFieldsDict[key], sign, illegalSigns))
         
    return result
