#!/usr/bin/env python
# encoding: utf-8

"""Convenience methods that help with debugging. They should never be used in
production code."""

import sys

from UltiSnips.compatibility import as_unicode

DUMP_FILENAME = "/tmp/file.txt" if not sys.platform.lower().startswith("win") \
        else "C:/windows/temp/ultisnips.txt"
with open(DUMP_FILENAME, "w"):
    pass # clears the file

def echo_to_hierarchy(text_object):
    """Outputs the given 'text_object' and its children hierarchically."""
    # pylint:disable=protected-access
    parent = text_object
    while parent._parent:
        parent = parent._parent

    def _do_print(text_object, indent=""):
        """prints recursively."""
        debug(indent + as_unicode(text_object))
        try:
            for child in text_object._children:
                _do_print(child, indent=indent + "  ")
        except AttributeError:
            pass
    _do_print(parent)

def debug(msg):
    """Dumb 'msg' into the debug file."""
    msg = as_unicode(msg)
    with open(DUMP_FILENAME, "ab") as dump_file:
        dump_file.write((msg + '\n').encode("utf-8"))

def print_stack():
    """Dump a stack trace into the debug file."""
    import traceback
    with open(DUMP_FILENAME, "ab") as dump_file:
        traceback.print_stack(file=dump_file)
