# coding: utf-8

# from java.text import SimpleDateFormat
from java.util import ArrayList
import json
from ru.curs.celesta.showcase.utils import XMLJSONConverter
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
    
from edu.constants import *
from dirusing.commonfunctions import relatedTableCursorImport
from edu._edu_orm import course_cycle_qti_packageCursor
from qt._qt_orm import QtiPackageCursor    


def procListAndCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curValue=None, startsWith=None, firstRecord=None, recordCount=None):
    courseCycleId = json.loads(session)['sessioncontext']['related']['gridContext']['currentRecordId']          
    cycleQtiCur = course_cycle_qti_packageCursor(context)    
    qtiPackageCur = QtiPackageCursor(context)
    # фильтрация записей по данным, введенным пользователем в селекторе
    qtiPackageCur.setFilter('PackageName', "@%s'%s'%%" % ("%"*(not startsWith), curValue))
    # сортировка
    qtiPackageCur.orderBy('PackageName')
#     subjectType.limit(firstrecord, recordcount)    
    recordList = ArrayList()
    # ограничение на единовременный вывод данных    
    a = firstRecord
    b = firstRecord + recordCount 
    count = 0
    for qti in qtiPackageCur.iterate():
        qtiId = qti.PackageID
        if not cycleQtiCur.tryGet(courseCycleId, qtiId):
            if count>=a and count<b: 
                rec = DataRecord()
                rec.id = str(qtiId)
                rec.name = qti.PackageName
                recordList.add(rec)
            count += 1
            
    qtiPackageCur.close()
    cycleQtiCur.close()
    
    return ResultSelectorData(recordList, count)


def eorListAndCount(context, main=None, add=None, filterinfo=None, session=None, params=None, curValue=None, startsWith=None, firstRecord=None, recordCount=None):
    courseCycleId = main         
    cycleQtiCur = course_cycle_qti_packageCursor(context)
    
    type = int(json.loads(XMLJSONConverter.xmlToJson(params))['schema']['filter']['eorType'])
    
    eor_type = EOR_TYPE[type]
    currentTable = relatedTableCursorImport(eor_type[1], eor_type[2])(context)
    currentTable.setFilter(eor_type[3], "@%s'%s'%%" % ("%"*(not startsWith), curValue))
    currentTable.orderBy(eor_type[3])

    recordList = ArrayList()
    # ограничение на единовременный вывод данных    
    a = firstRecord
    b = firstRecord + recordCount 
    count = 0
    for eor in currentTable.iterate():
        eor_id = getattr(eor, eor_type[4])
        if not cycleQtiCur.tryGet(courseCycleId, eor_id):
            if count>=a and count<b: 
                rec = DataRecord()
                rec.id = str(eor_id)
                rec.name = getattr(eor, eor_type[3])
                recordList.add(rec)
            count += 1
            
    currentTable.close()
    cycleQtiCur.close()
    
    return ResultSelectorData(recordList, count)