# Authors: see git history
#
# Copyright (c) 2010 Authors
# Licensed under the GNU GPL version 3.0 or later.  See the file LICENSE for details.

from inkex import NSS
from lxml import etree

from ..utils import cache


@cache
def get_document(node):
    return node.getroottree().getroot()


def generate_unique_id(document_or_element, prefix="path"):
    if isinstance(document_or_element, etree._ElementTree):
        document = document_or_element.getroot()
    else:
        document = get_document(document_or_element)

    doc_ids = {node.get('id') for node in document.iterdescendants() if 'id' in node.attrib}

    i = 1
    while True:
        new_id = "%s%d" % (prefix, i)
        if new_id not in doc_ids:
            break
        i += 1

    return new_id


def find_elements(node, xpath):
    document = get_document(node)
    elements = document.xpath(xpath, namespaces=NSS)
    return elements
