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

@author: i.lopatin

'''
import json

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from qt._qt_orm import  QtiThemeCursor, QtiQuestionCursor, QtiDestructorCursor
from qt.functions import setAccessPermission
import uuid

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'''Процедура для отрисовки данных карточки. '''
    u"""В карточке присутствует одна кнопка - 'Перейти к отладке'"""
    u"""При нажатии на кнопку открывается новая страница с заданным адресом (переменная extLink)"""

    u"""Курсор для таблицы тем"""
    theme = QtiThemeCursor(context)
    qti_question = QtiQuestionCursor(context)
    qti_destructor = QtiDestructorCursor(context)
    u"""Основа для внешней ссылки, по которой происходит переход"""
    extLink = "&mode=theme&package="

    u"""Получение набора данных о гриде"""
    gridContext = json.loads(session)['sessioncontext']['related']['gridContext']
    
    u"""Проверка присутствия выделенных записей"""    
    if 'selectedRecordId' in gridContext:
        selectedRecordId = gridContext['selectedRecordId']
        u"""Приведение данных о выделенных записях к списку"""
        if  not isinstance(selectedRecordId, list):
            selectedRecordId = [selectedRecordId]
    
    u"""Флаг для выполнения дейсвтия один раз"""
    counter = 1  
    u"""Проход по всем выделенным записям / формирование внешней ссылки""" 
    count = 0
    emptyFlag = False
    errorText = ''
    for record in selectedRecordId:
        theme.get(record)
        qti_question.setRange('ThemeID',record)
        count += qti_question.count()
        questionList = []
        for question in qti_question.iterate():
            qti_destructor.setRange('QuestionID',question.QuestionID)
            if qti_destructor.count() == 0:
                questionList.append(str(question.QuestionOrder))
        if questionList:
            errorText += u'В теме "%s" вопросы №%s не содержат вариантов ответа. '%(theme.ThemeName,','.join(questionList))
            emptyFlag = True
        if counter == 1:
            extLink += theme.PackageID
            ucode = unicode(uuid.uuid4())
            extLink += "&param=" + ucode
            extLink += "&theme=" + theme.ThemeID
            counter += 1 
        else:
            extLink += "&theme=" + theme.ThemeID 
    
    if count == 0:
        emptyFlag = True
        errorText = u'Выбранные темы не содержат вопросов'
    
    u"""Данные для карточки"""    
    xformsdata = {"schema":{"themeData": {"@add":add,
                                            "@themeID": theme.ThemeID,
                                            "@uuid": ucode,
                                            "@empty": 'true' if emptyFlag else 'false',
                                            "@errorText": errorText
                                           }
                            }
                  }
   
    
    u"""Начальные настройки карточки"""
    xformssettings = {"properties":{"event":
                        {"@name":"single_click",
                                 "@linkId": "1",
                                 "action":{
                                    "#sorted": 
                                       [
                                        {"main_context": "current"},
                                        {"datapanel":
                                            {"@type": "current",
                                                 "@tab": "current",
                                                 "element": {"@id":"debugThemeCard",
                                                             "add_context": "hide"
                                                            }
                                            },
                                        },
                                       
                         {"client": 
                            {"activity": 
                                [
                                    {
                                     "@id": "debugTheme",
                                     "@name": "goToTest",
                                     "add_context": extLink
                                     }
                                 ]

                            }
                          }             ]
                                 
                                            },
                                 }
                        
                        }
          }
    
    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xformsdata)),
                     XMLJSONConverter.jsonToXml(json.dumps(xformssettings))
                     )

def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Процедура сохранения'''  
    session = json.loads(session)
    u"""Получение набора атрибутов"""  
    if elementId.lower() == "debugquestioncard":
        content = json.loads(xformsdata)["schema"]["questionData"]
    else:
        content = json.loads(xformsdata)["schema"]["themeData"]

    u"""Получение sid пользователя"""
    sid = session['sessioncontext']['sid']
    u"""Получение режима работы"""
    mode = content["@add"]
    u"""Получение варианта"""
    variantId = content["@uuid"]

    u"""Установка доступа"""
    setAccessPermission(context, sid, mode, variantId)

