# Path: modules/params.py
# class Params:
#     def __init__(self, default_limit = 100, max_limit = 500):
#         self.bbox       = request.query.getunicode('bbox', default=None)
#         self.item       = request.query.getunicode('item')
#         self.source     = request.query.getunicode('source', default='')
#         self.classs     = request.query.getunicode('class', default='')
#         self.users      = request.query.getunicode('username', default='')
#         self.level      = request.query.getunicode('level', default='1,2,3')
#         self.full       = request.query.getunicode('full', default=False)
#         self.zoom       = request.query.get('zoom', type=int, default=10)
#         self.limit      = request.query.get('limit', type=int, default=default_limit)
#         self.country    = request.query.getunicode('country', default=None)
#         self.useDevItem = request.query.getunicode('useDevItem', default=False)
#         self.status     = request.query.getunicode('status', default="open")
#         self.start_date = request.query.getunicode('start_date', default=None)
#         self.end_date   = request.query.getunicode('end_date', default=None)
#         self.tags       = request.query.getunicode('tags', default=None)
#         self.fixable    = request.query.getunicode('fixable', default=None)
#         self.osm_type   = request.query.getunicode('osm_type', default=None)
#         self.osm_id     = request.query.get('osm_id', type=int, default=None)
#         self.tilex      = request.query.getunicode('tilex', default=None)
#         self.tiley      = request.query.getunicode('tiley', default=None)
# 
#         if self.level:
#             self.level = self.level.split(",")
#             try:
#                 self.level = ",".join([str(int(x)) for x in self.level if x])
#             except:
#                 self.level = "1,2,3"
#         if self.bbox:
#             try:
#                 self.bbox = list(map(lambda x: float(x), self.bbox.split(',')))
#             except:
#                 self.bbox = None
#         if self.users:
#             self.users = self.users.split(",")
#         if self.limit is not None and self.limit > max_limit:
#             self.limit = max_limit
#         if self.country and not re.match(r"^([a-z_]+)(\*|)$", self.country):
#             self.country = ''
#         if self.useDevItem == "true":
#             self.useDevItem = True
#         elif self.useDevItem == "all":
#             pass
#         else:
#             self.useDevItem = False
#         if self.start_date:
#             self.start_date = utils.str_to_datetime(self.start_date)
#         if self.end_date:
#             self.end_date = utils.str_to_datetime(self.end_date)
#         if self.tags:
#             self.tags = self.tags.split(",")
# 
#         if self.osm_type and self.osm_type not in ['node', 'way', 'relation']:
#             self.osm_type = None
#         if self.osm_id and not self.osm_type:
#             self.osm_id = None
# 
# Path: api/user_utils.py
# def _user_count(db, username=None):
#     params = Params()
#     if username:
#         params.users = username.split(",")
# 
#     if not params.users:
#         return
# 
#     res = query._count(db, params, ['class.level'], ['class.level'])
#     ret = {1:0, 2:0, 3:0}
#     for (l, c) in res:
#         ret[l] = c
# 
#     return ret


from bottle import route, request, redirect
from modules.params import Params
from modules import utils, query, query_meta
from api.user_utils import _user_count
from collections import defaultdict
## but WITHOUT ANY WARRANTY; without even the implied warranty of        ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         ##
## GNU General Public License for more details.                          ##
##                                                                       ##
## You should have received a copy of the GNU General Public License     ##
## along with this program.  If not, see <http://www.gnu.org/licenses/>. ##
##                                                                       ##
###########################################################################



@route('/map')
def errors():
    redirect("map/?" + request.query_string)


@route('/map/.json')
def index(db, user, lang):
    if request.query_string:
        redirect("./#" + request.query_string)

    tags = query_meta._tags(db)

    categories = query_meta._items(db, langs = lang)

    item_levels = {'1': set(), '2': set(), '3': set()}
    for categ in categories:
        for item in categ['items']:
            del(item['number'])
            for index, classs in enumerate(item['class']):

# Path: modules/params.py
# class Params:
#     def __init__(self, default_limit = 100, max_limit = 500):
#         self.bbox       = request.query.getunicode('bbox', default=None)
#         self.item       = request.query.getunicode('item')
#         self.source     = request.query.getunicode('source', default='')
#         self.classs     = request.query.getunicode('class', default='')
#         self.users      = request.query.getunicode('username', default='')
#         self.level      = request.query.getunicode('level', default='1,2,3')
#         self.full       = request.query.getunicode('full', default=False)
#         self.zoom       = request.query.get('zoom', type=int, default=10)
#         self.limit      = request.query.get('limit', type=int, default=default_limit)
#         self.country    = request.query.getunicode('country', default=None)
#         self.useDevItem = request.query.getunicode('useDevItem', default=False)
#         self.status     = request.query.getunicode('status', default="open")
#         self.start_date = request.query.getunicode('start_date', default=None)
#         self.end_date   = request.query.getunicode('end_date', default=None)
#         self.tags       = request.query.getunicode('tags', default=None)
#         self.fixable    = request.query.getunicode('fixable', default=None)
#         self.osm_type   = request.query.getunicode('osm_type', default=None)
#         self.osm_id     = request.query.get('osm_id', type=int, default=None)
#         self.tilex      = request.query.getunicode('tilex', default=None)
#         self.tiley      = request.query.getunicode('tiley', default=None)
# 
#         if self.level:
#             self.level = self.level.split(",")
#             try:
#                 self.level = ",".join([str(int(x)) for x in self.level if x])
#             except:
#                 self.level = "1,2,3"
#         if self.bbox:
#             try:
#                 self.bbox = list(map(lambda x: float(x), self.bbox.split(',')))
#             except:
#                 self.bbox = None
#         if self.users:
#             self.users = self.users.split(",")
#         if self.limit is not None and self.limit > max_limit:
#             self.limit = max_limit
#         if self.country and not re.match(r"^([a-z_]+)(\*|)$", self.country):
#             self.country = ''
#         if self.useDevItem == "true":
#             self.useDevItem = True
#         elif self.useDevItem == "all":
#             pass
#         else:
#             self.useDevItem = False
#         if self.start_date:
#             self.start_date = utils.str_to_datetime(self.start_date)
#         if self.end_date:
#             self.end_date = utils.str_to_datetime(self.end_date)
#         if self.tags:
#             self.tags = self.tags.split(",")
# 
#         if self.osm_type and self.osm_type not in ['node', 'way', 'relation']:
#             self.osm_type = None
#         if self.osm_id and not self.osm_type:
#             self.osm_id = None
# 
# Path: api/user_utils.py
# def _user_count(db, username=None):
#     params = Params()
#     if username:
#         params.users = username.split(",")
# 
#     if not params.users:
#         return
# 
#     res = query._count(db, params, ['class.level'], ['class.level'])
#     ret = {1:0, 2:0, 3:0}
#     for (l, c) in res:
#         ret[l] = c
# 
#     return ret


# Path: web_api/map.py
from bottle import route, request, redirect
from modules.params import Params
from modules import utils, query, query_meta
from api.user_utils import _user_count
from collections import defaultdict

## but WITHOUT ANY WARRANTY; without even the implied warranty of        ##
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         ##
## GNU General Public License for more details.                          ##
##                                                                       ##
## You should have received a copy of the GNU General Public License     ##
## along with this program.  If not, see <http://www.gnu.org/licenses/>. ##
##                                                                       ##
###########################################################################



@route('/map')
def errors():
    redirect("map/?" + request.query_string)


@route('/map/.json')
def index(db, user, lang):
    if request.query_string:
        redirect("./#" + request.query_string)

    tags = query_meta._tags(db)

    categories = query_meta._items(db, langs = lang)

    item_levels = {'1': set(), '2': set(), '3': set()}
    for categ in categories:
        for item in categ['items']:
            del(item['number'])
            for index, classs in enumerate(item['class']):

                item['class'][index] = {