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

@author: v.popov
'''

import simplejson as json
import tempfile
from java.util.zip import *
from java.io import File, ByteArrayOutputStream, FileOutputStream, \
    FileInputStream, FileNotFoundException, ByteArrayInputStream, \
    BufferedInputStream, ByteArrayOutputStream
from java.util import ArrayList
from qt._qt_orm import QtiPackageCursor, QtiThemeCursor, \
    QtiPackageAttributeCursor, QtiQuestionCursor, QtiDestructorCursor, ContentCursor, Content_AttributeValueCursor
from qt.functions import convertTestHtml
from zipfile import ZipFile
from zipfile import is_zipfile

from common.dbutils import DataBaseXMLExchange
from java.io import FileOutputStream, FileInputStream
from org.xml.sax import InputSource
from org.python.apache.commons.compress.utils import IOUtils

# from catalogs._catalogs_orm import cycles_viewCursor, faculty_departmentCursor

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




def archiveUpload(context, main, add, filterinfo, session, elementId, xformsdata, fileName, file):
    u'''Процедура для скачивания файлов в специальную директорию'''

    catalog = QtiPackageCursor(context)
    attribute = QtiPackageAttributeCursor(context)
    theme = QtiThemeCursor(context)
    question = QtiQuestionCursor(context)
    destructor = QtiDestructorCursor(context)
    content = ContentCursor(context)
    contentAttr = Content_AttributeValueCursor(context)
    
    u"""Словарь необъодимыъ курсоров"""
    cursor_dict = {"package": catalog,
                   "packattribute": attribute,
                   "theme": theme,
                   "question": question,
                   "destructor": destructor,
                   "content": content,
                   "contattribute_contentid": contentAttr
                   }
    u"""Получение потока из архива"""
    zis = ZipInputStream(file)
    tmpZis = ZipInputStream(file)
    entry = zis.getNextEntry()
    
    u"""Копирование потока"""
    while entry is not None:    
        dest = ByteArrayOutputStream()
        while 1:
            onebyte = zis.read()
            if onebyte == -1:
                break
            else:
                dest.write(onebyte)

#         if 'package' in entry.getName().lower():
#             exchange = DataBaseXMLExchange(ByteArrayInputStream(dest.toByteArray()), catalog)
#         else:
#             exchange = DataBaseXMLExchange(ByteArrayInputStream(dest.toByteArray()), theme)
#         exchange.uploadXML()
        u"""Поиск файлов соответствующих заданным курсорам"""
        for key in cursor_dict:
            if entry.getName().lower().startswith(key):
                exchange = DataBaseXMLExchange(ByteArrayInputStream(dest.toByteArray()), cursor_dict[key])
        u"""Загрузка файла и извлечение следующего из архива"""
        try:
            exchange.uploadXML()  
        except:
            context.error(u"Ошибка при скачивании файла.")  
        entry = zis.getNextEntry()
              
    zis.close()
    
def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Данные для карточки.'''

    # Структура данных
    xformsdata = {"schema":
                  {"context":
                   {"@id": "unique",
                    "@uploadStarted": '1',
                   "@message": u'Выберите, пожалуйста, файл.',
                   "@uploadMessage": u'Пожалуйста ждите. Загрузка может занять некоторое время.',
                   "@successMessage": u'Загрузка файла завершена!',
                    "files1": '',
                    "@mode": add
                    
                    }}}

    xformssettings = {"properties":{"event":{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{
                                                  "#sorted": [
                                                      {"main_context": "current"},
                                                      {"datapanel": {"@type": "current",
                                                                     "@tab": "current",
                                                                     "element": {"@id":"btzCatalogGrid",
                                                                                 "add_context": ""}
                                                                     }
                                                      }]}
                                             }
                                    }
                      }


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


def cardDataSave(context, main=None, add=None, filterinfo=None, session=None, elementId=None, xformsdata=None):
    session = json.loads(session)['sessioncontext']
