#!/usr/bin/env python
# -*- charset: utf-8 -*-
# vim: sts=4 sw=4 et

import sys
from streetmangler import Locale, Database
import lxml.etree as ET

if len(sys.argv) < 3:
    print "Usage: %s basename file.osm" % sys.argv[0]
    sys.exit(1)

base = sys.argv[1]

if sys.argv[2] == '-':
    fp = sys.stdin
else:
    fp = open(sys.argv[2])

streets = {}

elements = {}
def _append(street, e, members):
    xml = streets.get(street)
    if xml is None:
        xml = ET.Element('osm', version='0.6', generator='osm-street-split')
        streets[street] = xml
    for m in members:
        _append(street, *elements[m])
    xml.append(e)

current = None
members = []

for event,e in ET.iterparse(fp, events=('start', 'end')):
    if event == 'start' and e.tag == 'tag':
        if e.attrib['k'] == 'addr:street':
            current = e.attrib['v']
    elif event == 'start' and e.tag == 'nd':
        members.append(('node', e.attrib['ref']))
    elif event == 'start' and e.tag == 'member':
        members.append((e.attrib['type'], e.attrib['ref']))
    elif e.tag in ('node', 'way'):
        if event == 'end':
            elements[(e.tag, e.attrib['id'])] = (e, members)
            _append(current, e, members)
        else:
            members = []
            current = None
    elif e.tag == 'way':
        node = event == 'start'

for k,v in streets.items():
    if k is None:
        continue
    print k, len(v)
    open(base + k + '.osm', 'w').write(ET.tostring(v, encoding='utf-8', pretty_print=True))
