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

@author: d.bozhenko.
'''
#модуль загрузки/выгрузки данных таблицы customPerms

import json

try:
    from ru.curs.showcase.core.jython import JythonDTO
except:
    from ru.curs.celesta.showcase import JythonDTO

try:
    from ru.curs.showcase.core.jython import JythonDownloadResult
except:
    from ru.curs.celesta.showcase import JythonDownloadResult

from ru.curs.celesta.showcase.utils import XMLJSONConverter
from security._security_orm import rolesCustomPermsCursor, customPermsCursor, customPermsTypesCursor
from ru.curs.celesta.syscursors import PermissionsCursor, RolesCursor
import os
from common.dbutils import DataBaseXMLExchange
from security.functions import tableDownload, tableUpload

from java.io import FileInputStream, FileOutputStream


def cardData(context, main, add, filterinfo=None, session=None, elementId=None):
    xformsdata = {"schema":{"@xmlns":"",
                            "context":{"@add":add}
                            }
                  }
    xformssettings = {"properties":{"event":[{"@name": "single_click",
                                              "@linkId": "1",
                                              "action":{"#sorted":[{"main_context": "current"},
                                                                    {"datapanel":{"@type": "current",
                                                                                 "@tab": "current",
                                                                                 "element":[{"@id": "customPermissionsGrid",
                                                                                            "add_context": 'current'},
                                                                                            {"@id": "rolesCustomPermissionsGrid",
                                                                                            "add_context": 'hide'}]
            
                                                                                 }
                                                                    }]}
                                              }]
                                    }
                      }
    jsonData = XMLJSONConverter.jsonToXml(json.dumps(xformsdata))
    jsonSettings = XMLJSONConverter.jsonToXml(json.dumps(xformssettings))
    return JythonDTO(jsonData, jsonSettings)

def cardSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    return

def permissionsload(context, main=None, add=None, filterinfo=None, session=None, elementId=None, data=None):
    permissions = PermissionsCursor(context)
    roles = RolesCursor(context)
    rolesCustomPerms = rolesCustomPermsCursor(context)
    customPerms = customPermsCursor(context)
    customPermsTypes = customPermsTypesCursor(context)
    cursors = [roles, permissions, customPermsTypes, customPerms, rolesCustomPerms]
    files = ['roles', 'permissions', 'customPermsTypes', 'customPerms', 'rolesCustomPerms']

    for i in range(len(cursors)):
        filePath = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), files[i] + '.xml')
        # raise Exception(filePath)
        if add == 'upload':
            dataStream = FileOutputStream(filePath)
        elif add == 'download':
            dataStream = FileInputStream(filePath)
        exchange = DataBaseXMLExchange(dataStream, cursors[i])
        if add == 'upload':
            exchange.downloadXML()
        elif add == 'download':
            exchange.uploadXML()
        dataStream.close()

def permissionsDownload(context, main=None, add=None, filterinfo=None, session=None, elementId=None, data=None):
    customPerms = customPermsCursor(context)
    fileName = 'customPermissions'
    return tableDownload(customPerms, fileName)

def permissionsUpload(context, main=None, add=None, filterinfo=None, session=None, elementId=None, data=None, fileName=None, file=None):
    customPerms = customPermsCursor(context)
    tableUpload(customPerms, file)
    return context.message(u"Данные успешно загружены в таблицу")