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

@author: v.popov
'''

import json
from qt._qt_orm import QtiPackageCursor, QtiThemeCursor, \
    QtiPackageAttributeCursor, QtiQuestionCursor, QtiDestructorCursor, ContentCursor, Content_AttributeValueCursor



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
    from ru.curs.showcase.app.api import UserMessage, MessageType
except:
    from ru.curs.celesta.showcase import JythonDTO, ResultSelectorData, DataRecord, UserMessage, MessageType

from ru.curs.celesta.showcase.utils import XMLJSONConverter
# from journals.functions import personIdFromSID


def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Данные для карточки.'''

    # Структура данных
    xformsdata = {"schema":
                  {"@xmlns":"",
                    "data":
                        {
                         'form_text': u'Вы действительно хотите удалить данный БТЗ?'
                    }
                  }
                  }

    # Первоначальная xformssettings
    xformssettings = {
        "properties":{
            "event":[
                {
                    "@name":"single_click",
                    "@linkId":"1",
                    "action":{
                        "#sorted": [
                            {"main_context":"current"},
                            {"datapanel":{
                                "@type":"current",
                                "@tab":"current",
                                "element":[
                                    {
                                        "@id":'btzCatalogGrid',
                                        "add_context":""
                                    },
                                    {
                                        "@id":'btzAttributesGrid',
                                        "add_context":""
                                    }
                                ]
                            }}
                        ]}
                }
            ]
        }
    }


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


def cardSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    u'''Сохранение карточки. '''

    u"""Создание необъодимых курсоров"""
    package = QtiPackageCursor(context)
    theme = QtiThemeCursor(context)
    question = QtiQuestionCursor(context)
    packageAttr = QtiPackageAttributeCursor(context)
    destructor = QtiDestructorCursor(context)
    content = ContentCursor(context)
    contentAttr = Content_AttributeValueCursor(context)
    
    u"""ID выделенного записи(пакета)"""
    try:
        packageId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']
    except:
        context.error(u"Ошибка в получении ID записи")

    package.get(packageId)
    theme.setRange('PackageID', packageId)
    packageAttr.setRange('PackageID', packageId)
    content.setRange('PackageID', packageId)
    
    u"""Выбор вопросов соответствующих заданной теме/ удаление вопросов"""
    for theme in theme.iterate():
        themeId = theme.ThemeID
        question.setRange("ThemeID", themeId)
        
        u"""Выбор деструкторов соотвествующих заданному вопросу / удаление деструкторов"""
        for question in question.iterate():
            questionId = question.QuestionID
            destructor.setRange("QuestionID", questionId)
            destructor.deleteAll()
            
        question.deleteAll()


    u"""Выбор значение контента по ID контента"""
    for content in content.iterate():
        contentId = content.ContentID
        contentAttr.setRange("ContentID", contentId)
        contentAttr.deleteAll() 
    
    u"""Удаление всех выбранных записей c зависящих от packageID."""
    content.deleteAll()
    packageAttr.deleteAll()
    theme.deleteAll()
    package.delete()
    
    
    
    
