# coding: UTF-8

from datetime import datetime
from java.util import ArrayList
import json

from fias._fias_orm import houseCursor

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 houseCount(context, main, add, filterinfo, session, params, curvalue, startswith):
    '''
    в params приходит гуид того АО, который самый низший по уровню был выбран ранее (aoguid)
    '''
    params = json.loads(XMLJSONConverter.xmlToJson(params))
    if 'parentId' in params["schema"]["filter"][0]:
        parentId = params["schema"]["filter"][0]["parentId"]["#text"]
    else:
        parentId = ''

    house = houseCursor(context)
    house.setComplexFilter(u'''aoguid = '%s' and
                               enddate > '%s' ''' % (unicode(parentId),
                                                     datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
    house.setFilter('housenum', "@'%s'%%" % curvalue)
    count = house.count()

    return ResultSelectorData(None, count)


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

    if not parentId:
        context.error(u"Выберите родительский элемент")
    house = houseCursor(context)
    # есть записи с истекшей датой => enddate>now
    house.setComplexFilter(u'''aoguid = '%s' and
                               enddate > '%s' ''' % (unicode(parentId),
                                                     datetime.now().strftime("%Y-%m-%d %H:%M:%S")))
    house.setFilter('housenum', "@'%s'%%" % curvalue)
    house.orderBy('housenum')

    house.limit(firstrecord, recordcount)
    recordList = ArrayList()
    houseDict = {1: u'влд ',  # владение
                 2: u'д ',  # дом
                 3: u'двлд ',  # домовладение
                 4: u'уч ',  # участок
                 }
    for house in house.iterate():
        rec = DataRecord()
        rec.id = unicode(house.houseid)
        housenum = house.housenum  # номер дома(домовладения, участка)
        houseType = houseDict.get(house.eststatus, None)
        nameList = [houseType, housenum]

        if house.buildnum:  # номер корпуса
            nameList.extend([u"корп.", unicode(house.buildnum)])
        if house.strucnum:  # номер строения
            nameList.extend([u"стр.", unicode(house.strucnum)])

        rec.name = " ".join(nameList)
        rec.addParameter("postcode", house.postalcode)  # почтовый индекс
        recordList.add(rec)
    if not house.count():
        context.error(u"Данные о домах не найдены")
    return ResultSelectorData(recordList, 0)