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

@author: Victor B.
'''
import json

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from common.sysfunctions import toHexForXml
from common.sysfunctions import getGridHeight, getGridWidth
from qt._qt_orm import QtiQuestionCursor, QtiThemeCursor

try:
    from ru.curs.showcase.core.jython import JythonDTO
    from ru.curs.showcase.app.api import MessageType, UserMessage
except:
    from ru.curs.celesta.showcase import JythonDTO


def gridData(context, main=None, add=None, filterinfo=None,
             session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None):
    u'''Функция получения данных для грида. '''
    
    session = json.loads(session)
    
    u"""Курсор таблицы qtiThemes"""
    theme = QtiThemeCursor(context)
    qti_question = QtiQuestionCursor(context)
    
    u"""Сохранение полученных url параметров"""
    urlparams = session['sessioncontext']['urlparams']['urlparam']
    
    u"""Получение из url параметров PackageID"""
    for urlparam in urlparams:
        if urlparam["@name"] == "package":
            package_id = urlparam["@value"][0]
            
    u"""Выбор тем соответствующих заданному PackageID"""
    theme.setRange('PackageID', package_id)
    
    u"""Определение переменной для JSON-данных"""
    data = {"records":{"rec":[
                              ]}
            }
 
    u"""Заголовки для столбцов грида"""
    _headers = {'id': ["~~id"],
                'ThemeName': [u'Название темы'],
                'ThemeNumber': [u'Номер темы'],
                'QuestionCount': [u'Количество вопросов'],
                "properties": ["properties"]
                }
           
    u"""Приведение названий столбцов к формату поддерживаемому XML файлами"""    
    for column in _headers:
        _headers[column].append(toHexForXml(_headers[column][0]))
                
    u"""Ограничение единовременно отображаемых данных в гриде""" 
    theme.limit(firstrecord - 1, pagesize)
    
    theme.orderBy('ThemeOrder')
    
    u"""Получения данных из таблицы qtiThemes для отображения их в гриде"""
    for theme in theme.iterate():
        themes_dict = {}
        themes_dict[_headers['id'][1]] = theme.ThemeID
        themes_dict[_headers['ThemeName'][1]] = theme.ThemeName
        themes_dict[_headers['ThemeNumber'][1]] = theme.ThemeOrder
        qti_question.setRange('ThemeID', theme.ThemeID)
        themes_dict[_headers['QuestionCount'][1]] = qti_question.count()
        themes_dict[_headers['properties'][1]] = {"event": [
                {"@name":"row_single_click",
                 "action": {
                    "#sorted": [
                        {"main_context": "current"},
                        {"datapanel": {
                            '@type':"current",
                            '@tab':"current",
                            'element': [
                                {"@id": "webQuestionGrid"},
                                {"@id": "btzAnswerGrid",
                                 "add_context": "hide"}]}}]}},
                {"@name":"row_double_click",
                 "action":{
                    "#sorted": [
                        {'navigator': {
                            '@element': 'theme-{}'.format(theme.ThemeID)}}]}}]}
                
        data["records"]["rec"].append(themes_dict)
    
    u"""Конвертация JSON-данных в XML"""
    data = XMLJSONConverter.jsonToXml(json.dumps(data))
    
    return JythonDTO(data, None)


def gridMeta(context, main, add=None, filterinfo=None,
             session=None, elementId=None):
    u"""Функция получения параметров для грида"""
    
    session = json.loads(session)
    
    u"""Курсор таблицы qtiThemes"""
    theme = QtiThemeCursor(context)
 
    u"""Сохранение полученных url параметров"""
    urlparams = session['sessioncontext']['urlparams']['urlparam']
    
    u"""Получение из url параметров PackageID"""
    for urlparam in urlparams:
        if urlparam["@name"] == "package":
            package_id = urlparam["@value"][0]
            
    u"""Выбор тем соответствующих заданному PackageID"""
    theme.setRange('PackageID', package_id)
    
    u"""Количество записей в таблице"""
    totalcount = theme.count()
    
    u"""Настройки грида"""
    settings = {}
    settings["gridsettings"] = {"columns": {"col":[] },
#                                 "labels": {"header": u"Темы"},
                                "properties": {"@gridHeight": getGridHeight(session, 1),
                                               "@gridWidth": u'100%',
                                               "@totalCount": totalcount,
                                               "@pagesize": "100"  # Максимальное количество отображаемых записей
                                               }
                                }
    settings["gridsettings"]["columns"]["col"].append({"@id":u'Номер темы',
                                                       "@width":"30px"})
    settings["gridsettings"]["columns"]["col"].append({"@id":u'Название темы',
                                                       "@width":"200px"})
    settings["gridsettings"]["columns"]["col"].append({"@id":u'Количество вопросов',
                                                       "@width":"30px"})
 
    return JythonDTO(None, XMLJSONConverter.jsonToXml(json.dumps(settings)))

def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u"""Функция отображения панели инструментов"""

    u"""Получение данных сессии"""
    session = json.loads(session)['sessioncontext']    
    u"""Курсор таблицы serviceCatalog"""
#     theme = QtiThemeCursor(context)
    
    u"""Переменная для задания стиля отображения кнопок"""
    style = "true"
    
    u"""Переменная для задания стиля отображения кнопок"""
    if 'currentRecordId' in session['related']['gridContext']:
        style = 'false'
        
    u"""Настройка toolbar"""
    data = {"gridtoolbar":{"item":[{"@img": '',
                                    "@text":u"Темы",
                                    "@hint":u"Темы",
                                    "@disable": "false",
                                    "action":{"@show_in": "MODAL_WINDOW",
                                              "#sorted":[{"main_context":"current"},
                                                         {"modalwindow":{"@caption": u"Темы",
                                                                         "@height": "500",
                                                                         "@width": "740"
                                                                         }
                                                          },
                                                         {"datapanel":{"@type": "current",
                                                                       "@tab": "current",
                                                                       "element": {"@id": "btzThemeCard",
                                                                                   "add_context":"add"}
                                                                       }
                                                          }]
                                              }
                                    },
                                    
                                    {"@text":u"Добавить набор вопросов из др. БТЗ",
                                     "@hint":u"Добавить набор вопросов из др. БТЗ",
                                     "@disable":"false",
                                     "action":
                                         {"@show_in":"MODAL_WINDOW",
                                          "#sorted":
                                            [{"main_context":'current'},
                                             {"modalwindow":
                                                {"@caption": u"Добавить набор вопросов из др. БТЗ",
                                                 "@height":"320",
                                                 "@width":"450"
                                                 }
                                              },
                                             {"datapanel":
                                                {"@type":"current",
                                                 "@tab":"current",
                                                 "element":
                                                     {"@id":'createBtzFromAnotherBtzCard',
                                                      "add_context": ""}
                                                }
                                             }]
                                         }
                                     },
                                   
                                   {"@text": u"Отладка тем",
                                     "@hint": u"Отладка тем",
                                     "@disable":style,
                                     "action":
                                         {"@show_in": "MODAL_WINDOW",
                                          "#sorted":
                                            [{"main_context":'current'},
                                             {"modalwindow":
                                                {"@caption": u"Отладка тем",
                                                 "@height":"320",
                                                 "@width":"450"
                                                 }
                                              },
                                             {"datapanel":
                                                {"@type":"current",
                                                 "@tab":"current",
                                                 "element":
                                                     {"@id":'debugThemeCard',
                                                      "add_context": "theme"}
                                                }
                                             }]
                                         }
                                     }
                                 
                                   ]
                           }
            }    
    return XMLJSONConverter.jsonToXml(json.dumps(data))


         
