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

@author: Victor B.
'''

import json
from uuid import uuid4

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from umk._umk_orm import edu_contentCursor, umk_versionCursor


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



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

    sessionjson = json.loads(session)["sessioncontext"]
    gridContext = sessionjson["related"]["gridContext"]
    complex_program_id = gridContext['currentRecordId']

    # Структура данных
    xformsdata = {"schema":
                  {"@xmlns":"",
                    "data":
                        {
                        "mode": "empty",
                        "modes": [{'@label': 'Пустой УМК', '@value': 'empty'},
                                  {'@label': 'Копированием версии УМК', '@value': 'copy'} ],
                        "selected_version_id": "",
                        "selected_version_name": "",
                        "complex_program_id": complex_program_id
                         }

                    }
                  }

    # Первоначальная xformssettings
    xformssettings = {"properties":{"event":[{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{
                                                '#sorted': [
                                                    {"main_context": "current"},
                                                    {"datapanel": {"@type": "current",
                                                                     "@tab": "current",
                                                                     "element": {"@id":'umkVersionGrid',
                                                                                 "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'''Сохранение карточки. '''


    xformsdata = json.loads(xformsdata)['schema']['data']
    umk_version = umk_versionCursor(context)
    edu_content = edu_contentCursor(context)
    umk_version.setRange('complex_program_id', xformsdata['complex_program_id'])
    umk_version.orderBy('number DESC')
    if umk_version.tryFirst():
        next_num = umk_version.number + 1
    else:
        next_num = 1
    # создание версии
    umk_version.uid = unicode(uuid4())
    umk_version.complex_program_id = xformsdata['complex_program_id']
    umk_version.number = next_num
    umk_version.status_id = 0
    umk_version.insert()

    umk_version_id = umk_version.uid

    # копирование УМК - сделаем потом
    if xformsdata['mode'] == 'copy':
        # Словарь связи старых и новых идентификаторов элементов учебного содержания
        selected_umk_version_id = xformsdata['selected_version_id']
        # Копирование элементов учебного содержания и привязанных к ним ЭОРов с параметрами
        edu_content.setRange('umk_version', selected_umk_version_id)
        edu_content.orderBy('sortvalue')
        for edu_content in edu_content.iterate():
            edu_content.uid = unicode(uuid4())
            edu_content.umk_version = umk_version_id
            edu_content.insert()

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

    string_bool = lambda x: x and 'true' or 'false'

    # Структура данных
    xforms_data = {
        'schema': {
            '@xmlns': '',
            'data': {
                'form_text': 'Вы действительно хотите удалить данную версию УМК?'
            }
        }
    }

    # Первоначальная xforms_settings
    xforms_settings = {
        'properties': {
            'event': [
                {
                    '@name': 'single_click',
                    '@linkId': '1',
                    'action': {
                        '@keep_user_settings': string_bool(True),
                        '#sorted': [
                          {'main_context': 'current',}
                          {'datapanel': {
                              '@type': 'current',
                              '@tab': 'current',
                              'element': {
                                  '@id': 'umkVersionGrid',
                                  'add_context': ''
                              }
                          }}
                        ]
                    }
                }
            ]
        }
    }

    return JythonDTO(XMLJSONConverter.jsonToXml(json.dumps(xforms_data)),
                     XMLJSONConverter.jsonToXml(json.dumps(xforms_settings)))


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

    edu_content = edu_contentCursor(context)
    umk_version = umk_versionCursor(context)
    current_id = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']
    # удаляем все эл-ты УС
    edu_content.setRange('umk_version', current_id)
    edu_content.deleteAll()
    # удаляем версию УМК
    umk_version.get(current_id)
    umk_version.delete()