# -*- coding: utf-8 -*-
__author__ = 'Sergei Erjemin'

from django.http import HttpResponse
from django.shortcuts import HttpResponseRedirect
from django.http import HttpRequest, HttpResponse
from oknardia.models import Building_Info
# from time import clock
import re
import urllib


def autocomplete_addr(request: HttpRequest) -> HttpResponse:
    """  Функция для автозаполнения формы выбора адреса. Получает методом GET переменную "term" и по ее образцу
    ищет доступные адреса в базе адреса из таблицы Building_Info

    :param request: входящий http-запрос
    :return response: исходящий http-ответ
    """
    # Для автозаполнения используется JQuery_UI: http://jqueryui.com/
    #     Пример и инструкции по использованию: http://professorweb.ru/my/javascript/jquery/level4/4_5.php
    #
    #     ВНИМАНИЕ ТЕХНИЧЕСКИЙ ДОЛГ,:  Более навороченный, по описанию лучше подходящий компонент автозаполнения
    #     https://www.devbridge.com/sourcery/components/jquery-autocomplete/ не заработал. Ну и хрен с ним!
    #
    #     ВНИМАНИЕ ТЕХНИЧЕСКИЙ ДОЛГ: возможен "перегрев" при частом обращении -- [Errno 10053]
    #     Предположительно из-за отсутсвия csrfmiddlewaretoken-серилизации Django. Проблема пофикусена(?) 2014-11-14
    # tStart = clock()
    if request.method == 'GET' and 'term' in request.GET:
        part_blocks = re.split(r"[,/;\s.\\:]+", str(request.GET['term']))
        if request.GET['use_filter'] == "only_known":
            q_autocomplete = Building_Info.objects.filter(kSeria_Link__kRoot_id__isnull=False)
        else:
            q_autocomplete = Building_Info.objects
        for i in part_blocks:
            q_autocomplete = q_autocomplete.filter(sAddress__icontains=i)
        q_autocomplete = q_autocomplete.all().order_by('sAddress')
        to_response = ""
        for i in q_autocomplete[:10]:
            to_response += '"' + i.sAddress + u'",'
        to_response = '[' + to_response[0:-1] + ']'             # Убираем последнюю запятую
        return HttpResponse(to_response)
    else:
        return HttpResponseRedirect("/")
