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

@author: Victor B.
'''

import json
import base64
from flute._flute_orm import tasksCursor

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

import uuid
import os

from ru.curs.celesta.showcase.utils import XMLJSONConverter


def cardData(context, main=None, add=None, filterinfo=None, session=None, elementId=None):
    u'''Карточка скачивания отчета.'''

    script_name_xls = {'journals.reports.nonBudgetEnroll.printToFlute': u'Отчет по внебюджетным слушателям (по зачислению)',
                   'journals.reports.rnimuEmployeesEnroll.printToFlute': u'Отчет о сотрудниках РНИМУ, начавших обучение в период'}

    # Структура данных
    xformsdata = {"schema":
                  {"@xmlns":"",
                    "data":
                        {
                         "doc_id": add,
                         "flute_status_id": "",
                         "flute_status_name": ""
                         }
                    }
                  }

    # проверяем статус задания во флейте
    xlreports = tasksCursor(context)
    xlreports.setRange('request_id', xformsdata['schema']['data']['doc_id'])
    # задание есть
    if xlreports.tryFirst():
        xformsdata['schema']['data']['flute_status_id'] = xlreports.status
        if xlreports.script in script_name_xls:
            xformsdata['schema']['data']['doc_name'] = script_name_xls[xlreports.script]
            xformsdata['schema']['data']['doc_extension'] = '.xls'
        else:
            xformsdata['schema']['data']['doc_name'] = u'Отчет'
            xformsdata['schema']['data']['doc_extension'] = '.xls'

        if xlreports.status == 0:
            xformsdata['schema']['data']['flute_status_name'] = u'Идет подготовка печатной формы.'
        elif xlreports.status == 1:
            xformsdata['schema']['data']['flute_status_name'] = u'Идет подготовка печатной формы.'
        elif xlreports.status == 2:
            xformsdata['schema']['data']['flute_status_name'] = u'Печатная форма готова.'
        elif xlreports.status == 3:
            xformsdata['schema']['data']['flute_status_name'] = u'При подготовке печатной формы возникли ошибки.'


    # Первоначальная xformssettings
    xformssettings = {"properties":{"event":[{"@name":"single_click",
                                             "@linkId": "1",
                                             "action":{"@keep_user_settings": "true",
                                                '#sorted': [
                                                    {"main_context": "current"},
                                                    {"datapanel": {"@type": "current",
                                                                     "@tab": "current",
                                                                     "element": {"@id":'reportsGrid',
                                                                                 "add_context": ""
                                                                                 }
                                                                     }}]
                                                       }
                                             }]
                                    }
                      }

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

def downloadDocument(context, main=None, add=None, filterinfo=None,
                  session=None, elementId=None, xformsdata=None, columnId=None):
    u'''Функция для скачивания файла из карточки. '''

    data_dict = json.loads(xformsdata)

    # Создаем курсор на таблицу отчетов
    xlreports = tasksCursor(context)
    xlreports.setRange('request_id', data_dict['schema']['data']['doc_id'])
    # документ готов
    xlreports.first()
    xlreports.calcresult()
    # Создаем поток
    data = xlreports.result.getInStream()
    # Если в потоке что-то есть, тогда вызываем скачивание файла
    if data:
        return JythonDownloadResult(data, u'%s%s' % (data_dict['schema']['data']['doc_name'],
                                                     data_dict['schema']['data']['doc_extension']))