#!python
"""
Utility function for capturing screenshot of a window.
"""

import sys
from subprocess import STDOUT, CalledProcessError, check_output

import argparse

def run(command, timeout=None) -> str:
    """
    Utility function to check output of a command.

    """
    try:
        output = check_output(
            command, shell=True, stderr=STDOUT, encoding="utf-8", timeout=timeout
        )
        return output
    except CalledProcessError as error:
        return error.output

def parse_arguments():
    """
    Parser for arguments given to the script.

    :return: Namespace object with attributes parsed out of the command line.
    :rtype: Namespace
    """

    parser = argparse.ArgumentParser(
        prog="$ qecore_capture_window_screenshot",
        description="Utility script to capture screenshot of a window.",
        formatter_class=argparse.RawDescriptionHelpFormatter,
    )

    parser.add_argument(
        "filename",
        nargs="?",
        default="/tmp/window_screenshot.png",
        help="Filename of the window screenshot.",
    )

    return parser.parse_args()

def main():
    """
    Main function.
    """

    try:
        file_name = sys.argv[1]
    except IndexError:
        file_name = "/tmp/my-window-screenshot.png"

    gdbus_command_output = run(
        " ".join(
            (
                "gdbus",
                "call",
                "-e",
                "-d",
                "org.gnome.Shell.Screenshot",
                "-o /org/gnome/Shell/Screenshot",
                "-m org.gnome.Shell.Screenshot.ScreenshotWindow",
                f"true false false {file_name}",
            )
        )
    ).strip("\n")

    print(gdbus_command_output)


if __name__ == "__main__":
    parse_arguments()
    main()
