#!/usr/bin/env python3
# Initialize administrative regions in the DB

from typing import List
import sys
import mo.db as db

session = db.get_session()

session.query(db.Place).delete()

nuts_by_name = {}
with open('db/cz-nuts') as nuts_list:
    for line in nuts_list:
        if line.startswith("#"):
            pass
        else:
            fields = line.rstrip().split('\t')
            if fields[-1] not in nuts_by_name:
                nuts_by_name[fields[-1]] = fields[0]

with open('db/regions') as reg_list:
    stack: List[db.Place] = []
    for line in reg_list:
        line = line.rstrip()
        cols = line.split('\t')

        level = 0
        while cols[level] == "":
            level += 1
        code, name = cols[level:]

        while len(stack) > level:
            stack.pop()

        parent = None
        if stack:
            parent = stack[-1].place_id

        nuts = nuts_by_name.get(name, None)
        if nuts is None:
            print(f"WARNING: No NUTS code for {name}", file=sys.stderr)

        place = db.Place(level=level, name=name, code=code, type=db.PlaceType.region, nuts=nuts, parent=parent, note="")
        session.add(place)
        session.flush()
        stack.append(place)

session.commit()