import sys, os
sys.path.append(os.path.abspath(os.path.dirname(os.path.realpath(__file__))))
import run

class Reveal:

    def __init__(self):
        self.r = run.Run()
        return
    
    def get_parent(self, path):
        return os.path.normpath(os.path.join(path, os.pardir))

    def reveal(self, path, new_window = False):
        # Reveals the passed path in Finder - only works on macOS
        if not sys.platform == "darwin":
            return ("", "macOS Only", 1)
        if not path:
            # No path sent - nothing to reveal
            return ("", "No path specified", 1)
        # Build our script - then convert it to a single line task
        if not os.path.exists(path):
            # Not real - bail
            return ("", "{} - doesn't exist".format(path), 1)
        # Get the absolute path
        path = os.path.abspath(path)
        command = ["osascript"]
        if new_window:
            command.extend([
                "-e", "set p to \"{}\"".format(path.replace("\"", "\\\"")),
                "-e", "tell application \"Finder\"",
                "-e", "reveal POSIX file p as text",
                "-e", "activate",
                "-e", "end tell"
            ])
        else:
            if path == self.get_parent(path):
                command.extend([
                    "-e", "set p to \"{}\"".format(path.replace("\"", "\\\"")),
                    "-e", "tell application \"Finder\"",
                    "-e", "reopen",
                    "-e", "activate",
                    "-e", "set target of window 1 to (POSIX file p as text)",
                    "-e", "end tell"
                ])
            else:
                command.extend([
                    "-e", "set o to \"{}\"".format(self.get_parent(path).replace("\"", "\\\"")),
                    "-e", "set p to \"{}\"".format(path.replace("\"", "\\\"")),
                    "-e", "tell application \"Finder\"",
                    "-e", "reopen",
                    "-e", "activate",
                    "-e", "set target of window 1 to (POSIX file o as text)",
                    "-e", "select (POSIX file p as text)",
                    "-e", "end tell"
                ])
        return self.r.run({"args" : command})

    def notify(self, title = None, subtitle = None, sound = None):
        # Sends a notification
        if not title:
            return ("", "Malformed dict", 1)
        # Build our notification
        n_text = "display notification with title \"{}\"".format(title.replace("\"", "\\\""))
        if subtitle:
            n_text += " subtitle \"{}\"".format(subtitle.replace("\"", "\\\""))
        if sound:
            n_text += " sound name \"{}\"".format(sound.replace("\"", "\\\""))
        command = ["osascript", "-e", n_text]
        return self.r.run({"args" : command})