#!/usr/bin/env python
# -*- coding: utf-8 -*-
# utils.py --- utils for musicbox
# Copyright (c) 2015-2016 omi & Contributors
from __future__ import (
    print_function, unicode_literals, division, absolute_import
)

import platform
import subprocess
import os
from collections import OrderedDict

from future.builtins import str


__all__ = [
    'utf8_data_to_file', 'notify', 'uniq', 'create_dir', 'create_file'
]


def mkdir(path):
    try:
        os.mkdir(path)
        return True
    except OSError:
        return False


def create_dir(path):
    if not os.path.exists(path):
        return mkdir(path)

    if os.path.isdir(path):
        return True

    os.remove(path)
    return mkdir(path)


def create_file(path, default='\n'):
    if not os.path.exists(path):
        with open(path, 'w') as f:
            f.write(default)


def uniq(arr):
    return list(OrderedDict.fromkeys(arr).keys())


def utf8_data_to_file(f, data):
    if hasattr(data, 'decode'):
        f.write(data.decode('utf-8'))
    else:
        f.write(data)


def notify_command_osx(msg, msg_type, t=None):
    command = ['/usr/bin/osascript', '-e']
    tpl = "display notification \"{}\" {} with title \"musicbox\""
    sound = 'sound name \"/System/Library/Sounds/Ping.aiff\"' if msg_type else ''
    command.append(tpl.format(msg, sound).encode('utf-8'))
    return command


def notify_command_linux(msg, t=None):
    command = ['/usr/bin/notify-send']
    command.append(msg.encode('utf-8'))
    if t:
        command.extend(['-t', str(t)])
    command.extend(['-h', 'int:transient:1'])
    return command


def notify(msg, msg_type=0, t=None):
    msg = msg.replace('"', '\\"')
    "Show system notification with duration t (ms)"
    if platform.system() == 'Darwin':
        command = notify_command_osx(msg, msg_type, t)
    else:
        command = notify_command_linux(msg, t)

    try:
        subprocess.call(command)
        return True
    except OSError as e:
        return False


if __name__ == "__main__":
    notify("I'm test \"\"quote", msg_type=1, t=1000)
    notify("I'm test 1", msg_type=1, t=1000)
    notify("I'm test 2", msg_type=0, t=1000)
