# -*- coding: UTF-8 -*-

from time import sleep
from dogtail.utils import isA11yEnabled, enableA11y
if not isA11yEnabled():
    enableA11y(True)

from common_steps import App, cleanup
from dogtail.config import config
from os import system, makedirs
from shutil import copyfile


def before_all(context):
    """Setup xviewer stuff
    Being executed before all features
    """

    try:
        # Skip dogtail actions to print to stdout
        config.logDebugToStdOut = False
        config.typingDelay = 0.2

        context.app_class = App('xviewer')

        context.screenshot_counter = 0
        context.save_screenshots = False
    except Exception as e:
        print("Error in before_all: %s" % e.message)


def before_tag(context, tag):
    try:
        # Copy screenshots
        if 'screenshot' in tag:
            context.save_screenshots = True
            context.screenshot_dir = "../xviewer_screenshots"
            makedirs(context.screenshot_dir)
    except Exception as e:
        print("Error in before_tag: %s" % str(e))


def after_step(context, step):
    try:
        if hasattr(context, "embed"):
            # Embed screenshot if HTML report is used
            system("dbus-send --session --type=method_call " +
                   "--dest='org.gnome.Shell.Screenshot' " +
                   "'/org/gnome/Shell/Screenshot' " +
                   "org.gnome.Shell.Screenshot.Screenshot " +
                   "boolean:false boolean:false string:/tmp/screenshot.png")
            if context.save_screenshots:
                # Don't embed screenshot if this is a screenshot tour page
                name = "%s/screenshot_%s_%02d.png" % (
                    context.screenshot_dir, context.current_locale, context.screenshot_counter)

                copyfile("/tmp/screenshot.png", name)
                context.screenshot_counter += 1
            else:
                context.embed('image/png', open("/tmp/screenshot.png", 'r').read())
    except Exception as e:
        print("Error in after_step: %s" % str(e))


def before_scenario(context, scenario):
    """ Cleanup previous settings and make sure we have test files in /tmp """
    try:
        cleanup()
    except Exception as e:
        print("Error in before_scenario: %s" % e.message)


def after_scenario(context, scenario):
    """Teardown for each scenario
    Kill xviewer (in order to make this reliable we send sigkill)
    """
    try:
        # Stop gnome-calculator
        context.app_class.kill()

        # Make some pause after scenario
        sleep(1)
    except Exception as e:
        # Stupid behave simply crashes in case exception has occurred
        print("Error in after_scenario: %s" % e.message)
