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

@author: 
'''
import json

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from common.sysfunctions import toHexForXml
from common.sysfunctions import getGridHeight

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

from author._author_orm import eor_lecturesCursor

def gridData(context, main=None, add=None, filterinfo=None,
             session=None, elementId=None, sortColumnList=None, firstrecord=None, pagesize=None):
    u'''Функция получения данных для грида. '''
    
    u"""Курсор таблицы с лекциями"""
    lecturesCur = eor_lecturesCursor(context)
    
    u"""Определение переменной для JSON-данных"""
    data = {"records":{"rec":[
                              ]}
            }
 
    u"""Заголовки для столбцов грида"""
    _headers = {'id': ["~~id"],
                'LectureName': [u'Название лекции'],
                'LectureRef': [u'Ссылка'],
                "properties": ["properties"]
                }
       
    u"""Приведение названий столбцов к формату поддерживаемому XML файлами"""    
    for column in _headers:
        _headers[column].append(toHexForXml(_headers[column][0]))
                
    u"""Ограничение единовременно отображаемых данных в гриде""" 
#     lecturesCur.limit(firstrecord - 1, pagesize)    
    lecturesCur.orderBy('lecture_name')
    
    u"""Получения данных из таблицы qtiThemes для отображения их в гриде"""
    for lecture in lecturesCur.iterate():
        lecture_dict = {}
        lecture_dict[_headers['id'][1]] = lecture.lecture_id
        lecture_dict[_headers['LectureName'][1]] = lecture.lecture_name
        lecture_dict[_headers['LectureRef'][1]] = {"a": {
                                                        "@class": "gwt-Anchor",
                                                        "@href": lecture.lecture_ref,
                                                        "@target": "_blank",
                                                        "#text": lecture.lecture_ref}}
                
        data["records"]["rec"].append(lecture_dict)
        
    lecturesCur.close()
    
    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"""
    lecturesCur = eor_lecturesCursor(context)  
    u"""Количество записей в таблице"""
    totalcount = lecturesCur.count()
    lecturesCur.close()
    u"""Настройки грида"""
    settings = {}
    settings["gridsettings"] = {"columns": {"col": []},
                                "properties": {"@gridHeight": getGridHeight(session, 1),
                                               "@gridWidth": '100%',
                                               "@totalCount": totalcount,
                                               "@pagesize": "100"  # Максимальное количество отображаемых записей
                                               }
                                }
    settings["gridsettings"]["columns"]["col"].append({"@id":u'Название лекции',"@width":"300px"})
    settings["gridsettings"]["columns"]["col"].append({"@id":u'Ссылка',"@width":"300px"})
 
    return JythonDTO(None, XMLJSONConverter.jsonToXml(json.dumps(settings)))


def gridToolBar(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u"""Функция отображения панели инструментов"""
    u"""Получение данных сессии"""
    ss = json.loads(session)['sessioncontext']
     
    u"""Переменная для задания стиля отображения кнопок"""
    style = "true"
     
    u"""Переменная для задания стиля отображения кнопок"""
    if 'currentRecordId' in ss['related']['gridContext']:
        style = 'false'
         
    u"""Настройка toolbar"""
    data = {"gridtoolbar":{"item":[{"@text": u"Добавить",
                                     "@hint": u"Добавить лекцию",
                                     "@disable": "false",
                                     "action":
                                         {"@show_in":"MODAL_WINDOW",
                                          "#sorted":
                                            [{"main_context":'current'},
                                             {"modalwindow":
                                                {"@caption": u"Добавление лекции",
                                                 "@height":"180",
                                                 "@width":"440"
                                                 }
                                              },
                                             {"datapanel":
                                                {"@type":"current",
                                                 "@tab":"current",
                                                 "element":
                                                     {"@id":'lectureCard',
                                                      "add_context": "add"}
                                                }
                                             }]
                                         }
                                     },
                                    {"@text": u"Изменить",
                                     "@hint": u"Изменить параметры лекции",
                                     "@disable": style,
                                     "action":
                                         {"@show_in":"MODAL_WINDOW",
                                          "#sorted":
                                            [{"main_context":'current'},
                                             {"modalwindow":
                                                {"@caption": u"Изменение лекции",
                                                 "@height":"180",
                                                 "@width":"440"
                                                 }
                                              },
                                             {"datapanel":
                                                {"@type":"current",
                                                 "@tab":"current",
                                                 "element":
                                                     {"@id":'lectureCard',
                                                      "add_context": "edit"}
                                                }
                                             }]
                                         }
                                     },
                                    {"@text":u"Удалить",
                                     "@hint":u"Удалить лекцию",
                                     "@disable": style,
                                     "action":
                                         {"@show_in":"MODAL_WINDOW",
                                          "#sorted":
                                            [{"main_context":'current'},
                                             {"modalwindow":
                                                {"@caption":u"Удаление лекции",
                                                 "@height":"120",
                                                 "@width":"440"
                                                 }
                                              },
                                             {"datapanel":
                                                {"@type":"current",
                                                 "@tab":"current",
                                                 "element":
                                                     {"@id":'lectureCard',
                                                      "add_context": "delete"}
                                                }
                                             }]
                                         }
                                     }
                                  
                                   ]
                           }
            }    
    return XMLJSONConverter.jsonToXml(json.dumps(data))