# coding: utf-8

from java.util import ArrayList
import json

from fias._fias_orm import addrobjCursor

try:
    from ru.curs.showcase.util import XMLJSONConverter
except:
    from ru.curs.celesta.showcase.utils import XMLJSONConverter

try:
    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 DataRecord, ResultSelectorData


def aoByLevelCount(context, main, add, filterinfo, session, params, curvalue, startswith):
    u'''в params приходит уровень (aolevel) и parentId'''
    params = json.loads(XMLJSONConverter.xmlToJson(params))["schema"]["filter"]
    paramsLevel = params[0]["level"]["#text"]
    if "parentId" in params[1]:
        parentId = params[1]["parentId"]["#text"]
    else:
        parentId = ""
    addrobj = addrobjCursor(context)
    addrobj.setRange("aolevel", int(paramsLevel))
    addrobj.setRange("actstatus", 1)
    addrobj.setRange("parentguid", parentId)
    if curvalue:
        addrobj.setFilter("formalname_lowercase", "'%s'%%" % curvalue.lower())
    count = addrobj.count()

    return ResultSelectorData(None, count)


def aoByLevelList(context, main=None, add=None, filterinfo=None, session=None, params=None,
                  curvalue=None, startswith=None, firstrecord=None, recordcount=None):
    addrobj = addrobjCursor(context)
    params = json.loads(XMLJSONConverter.xmlToJson(params))["schema"]["filter"]
    paramsLevel = params[0]["level"]["#text"]
    if "parentId" in params[1]:
        parentId = params[1]["parentId"]["#text"]
    else:
        parentId = ""

    addrobj.setRange("aolevel", int(paramsLevel))
    addrobj.setRange("actstatus", 1)
    addrobj.setRange("parentguid", parentId)
    if curvalue:
        addrobj.setFilter("formalname_lowercase", "'%s'%%" % curvalue.lower())
    if not addrobj.count() and not curvalue:
        context.error(u"Данные на выбранном уровне не найдены")
    addrobj.orderBy("formalname_lowercase")
    addrobj.limit(firstrecord, recordcount)
    recordList = ArrayList()
    for addrobj in addrobj.iterate():
        rec = DataRecord()
        rec.id = addrobj.aoguid  # записываем в id ссылку на АО
        rec.name = "%s %s " % (addrobj.formalname, addrobj.shortname)
        rec.addParameter("aoid", addrobj.aoid)  # записываем в aoid ссылку на первичный ключ
        rec.addParameter("postcode", addrobj.postalcode)
        rec.addParameter("regioncode", addrobj.regioncode)
        recordList.add(rec)
    return ResultSelectorData(recordList, 0)